[Home]
Digital Mars C/C++ Version Info
Sep 3, 2005
- New/Changed
- Modified class layout for multiple inheritance of empty
base classes, so they take up a minimum of one byte. This is
so that pointer-to-members in different base classes can be
properly distinguished.
- Added -Ad switch which goes back to one-level name
lookup for compatibility with legacy C++ code.
Some examples:
- For any use with the older STL implementation in \dm\stl.
- For \dm\stlport\stlport\stl\_deque.h, change line 429 from:
allocator_type get_allocator() const { return _M_map_size; }
to:
allocator_type get_allocator() const { return this->_M_map_size; }
- Bruce Eckel's "Thinking in C++" example C05/Sortable.cpp.
- Added forward referencing in class member function default arguments.
- Now passes all tests in
Dr. Dobb's
Conformance Comparison of C++ Compilers: Oct 2003.
- Bug fixes
July 29, 2005
- New/Changed
- Implemented C++ DR337
- Added -Ai switch to enable implicit casting from void* in C++
for legacy compatibility (such is not C++98 compliant).
- C++ string literals are now typed as const.
- Supports two-level template name lookup.
- Bug fixes
Apr 8, 2005
- New/Changed
- Added Pentium 4 (Prescott) instructions to inline assembler.
- Bug fixes
- Fixed several obscure problems with deeply nested preprocessor
macro expansions.
- Fixed bad code gen for PEXTRW instruction.
- Fixed C++98 14.5.2-5
- Fixed some problems with member template function
explicit specializations.
- Fixed problems with operator overloads as template
member functions.
- Fixed problem with deeply nested :: typedefs.
- Corrected partial ordering problem with value parameters.
- Fixed int[array] bug in C compiler.
- Fixed Internal error: func 281
- Fixed problem with converting struct to int inside [].
Mar 2, 2005
- New/Changed
- io.h's tell() is now an inline function, rather than a macro,
for C++.
- Added
-HHfilename switch to dmc.exe.
- Added
-HPnn switch to dmc.exe.
- Bug fixes
- Fixed internal error type 600
- Changed unmangled output of constants from hex to decimal
- Fixed spurious "Error: no type for argument" error
- Fixed template partial specialization for typedef class
members
- Fixed function overloading bug with ...
- Fixed function overloading bug with user defined conversions
- Fixed pretty printing of arrays of consts
- Fixed problem with user defined conversions coupled with
some forms of class upcasting.
- Fixed bug overloading non-const references to different types.
Sep 5, 2004
- New/Changed
- Added C99 struct and array designated initializers.
- For C++, warning 11 is now always an error.
- For C++, void* is no longer implicitly convertible to other
pointer types.
- Added wmem* C99 functions.
- Bug fixes
- Fixed sscanf bug with end of string.
- Quotes, spaces and tabs now allowed in path of -I switch.
- Fixed problem with backwards branch on long double comparison.
- Fixed implib bug where missing LIBRARY statement would cause
crash.
- Fixed internal error cg87 279.
- Fixed internal error cg87 313.
- Fixed -A bug with dm\stlport\stlport\config\stl_dm.h.
- Fixed obscure crasher with delete[] on classes with
constructor but no destructor.
- Fixed dllexport on global pointer declarations.
- Fixed template default parameter bug with Range classes.
- Fixed >>= sign problem.
- Fixed outp() codegen problem with register variables.
- Fixed dm\include\win32\wownt16.h so it works with C++.
- Fixed internal error ph 1116.
- Fixed partial specialization bug with class templates
and value parameters.
- Fixed whitespace bug with empty macro expansion.
- Fixed #line followed by macro.
- Fixed name mangling for array of const.
- Fixed bug with typeid(test<bool const volatile[2]>);
- Fixed erroneous code generation within sizeof expressions.
- Fixed partial specialization ambiguity with template template
parameters.
- Fixed incorrect parsing of > inside template sizeof.
- Fixed problem with user defined conversion to bool.
Feb 20, 2004
- New/Changed
- Bug fixes
- Fixed protected access problem with wxWindows.
- Fixed recursion bug in strpbrk().
- Fixed MI bug with function overloading.
Feb 12, 2004
- New/Changed
- Added switches
-A89, -A90, -A94, -A95, -A99
for various values of
__STDC_VERSION__
and standard C conformance.
- Added functions fwide, isblank,
vfscanf, vscanf, vsscanf,
vsnprintf, _Exit, lldiv,
atoll, ilogb, logb, cbrt,
exp2, erf, erfc.
- Added C99 formats to strftime, wcsftime.
- Functions in fenv.h now return int, not void.
- Changed _stprintf in \dm\include\tchar.h to map
to sprintf and swprintf.
- Removed "angle bracket hack" where >> token
was interpreted as two greater than tokens to close a
nested template argument list.
- Member operator delete[] is now recognized.
- Unnamed template parameters now allowed.
- Implemented surrogate call functions.
- Implemented TC1 issue #1.
- Per C++98, typedef names can no longer appear
after struct, class, union or enum.
- Implemented some aspects of dependent/independent name
lookup.
- Fixed return value of fesetround().
- Bug fixes
- Fixed values of LDBL_MAX_EXP and LDBL_MIN_EXP in float.h.
- Fixed range problems with some long double math functions.
- USHRT_MAX in limits.h is now signed.
- ferror now shows error for a read of a file opened for write.
- Updated asctime format to C99.
- wcstok now correctly has 3 parameters.
- Fixed vswprintf() signature.
- Fixed Internal error: cgcod 1459.
- Fixed Internal error: cod2 410.
- Fixed Internal error: go 237.
- Fixed Internal error: cgcs 213.
- Fixed problem with spaces in preprocessor concatenations.
- Tightened private/protected access checks.
- Tightened error checking for templates.
- Did a sweep through the C++98 spec, fixing several
obscure issues.
WHAT'S NEW FOR C/C++ 8.38
Nov 30, 2003
- New/Changed
- Added __BASE_FILE__ predefined macro.
- Source files not ending in newline are now allowed with
C++ and -A (but are not for C and -A).
- Now accepts \u and \U universal character names in identifiers.
- Added log2 functions.
- Bug fixes
- Template functions now inlined.
- Fixed destructor call problem in virtual base initializer list.
- Inherited exception specifications now checked for equivalence.
- Fixed problem with ldexpl() and cosh().
- Fixed optimizer peephole problem.
- Fixed problem with outlined nested struct functions inside class template.
- Fixed a couple of recursive macro expansion problems.
- Fixed problem with //* comment following #else or #endif with -A.
- Fixed problem with multiply defined local statics in inline
functions with constructors.
- Fixed obscure name lookup cases.
- Fixed parsing problem with default template template parameters.
- T can now be cast to T volatile&.
- Fixed accuracy problem with log10t().
WHAT'S NEW FOR C/C++ 8.37
Oct 17, 2003
- Fixed another problem with statics.
- Fixed several problems with templates discovered by Bruce Eckel.
- Fixed problem where nested class functions inside class templates
sometimes did not get expanded inline properly.
- Fixed problem with member function pointers of templated type
inside template parameter list.
- Added support for template-template-parameters.
- C++ alternate keywords are now always enabled,
instead of just with -A.
- Fixed problems with friend scopes and multiple initializations
of template statics.
- Removed default support of \dm\stl, as only \dm\stlport\stlport
will continue to be supported.
WHAT'S NEW FOR C/C++ 8.36
Sep 8, 2003
- Fixed problem with statics introduced by 8.35.
- More Boost issues fixed.
- VLA's with destructors now give proper error message.
- Fixed problem with iostream files.
WHAT'S NEW FOR C/C++ 8.35
Aug 22, 2003
- Fixed problem with "bad type index" messages from the linker.
This would sometimes happen if debug compiles, namespaces, and
precompiled headers were used together.
- Fixed problem with needing to #include <typeinfo.h>
before <exception>.
- Removed the _ prefixed long double names from math.h.
- Now issues an error on negative array dimensions.
- Fixed numerous issues with compiling Boost.
- Fixed preprocessor problem with F. Tydeman's tests.
- Fixed nanl() and copysignl().
- Fixed bug with redefinitions of statics.
- Fixed internal error out 637.
- Fixed internal error type 149.
- Upgraded to STLsoft 1.6.5.
- Make
- Comment lines are now removed before \ line splicing (thanks,
Matthew).
- Command lines can be much longer now.
WHAT'S NEW FOR C/C++ 8.34
Jun 1, 2003
- Added STLsoft libraries; see \dm\stlsoft\readme\readme.txt.
- Fixed numerous template problems.
- Fixed several enum promotion problems.
- Fixed problem with bringing ?: to common type.
- Fixed problem with large stack frames.
- Fixed argument reversal on movq2dq inline asm opcode.
- Changed arguments (added count) to swprintf() and
vswprintf() for compatibility with C99. This can break
existing code.
- Added 8087 opcodes feni, fneni, fdisi, and fndisi.
- Fixed -A problems with stdlib.h and string.h.
- type_info::before() is now const per C++98.
- Fixed case insensitivity problem in RegExp.
- Added standard headers <exception> and <typeinfo>
per C++98.
This required a rebuild of the stlport libraries and DLLs.
WHAT'S NEW FOR C/C++ 8.33
Mar 18, 2003
- Addes support for ::template syntax.
- Fixed numerous template problems.
- Implemented hypotl().
- Implemented frexpl().
- ldexp() is now builtin to the compiler.
- Fixed some problems compiling Boost.
- Fixed some problems with template argument deduction.
- Fixed rare case of loss of precision with long doubles.
- Fixed problem with 16 bit DOS libraries and 8088 PC/XT.
WHAT'S NEW FOR C/C++ 8.32
Jan 4, 2003
- Fixed internal error cg87 2490.
- Fixed gp fault for nested template expansions with non-type
args.
- Added predefined macro __DMC_VERSION_STRING__.
- Implemented boolean conversions per C++98 4.12.
- Upgraded namespace support to C++98.
- Implemented overloading by enum.
- Implemented Argument Dependent Lookup.
- Implemented friend namespace qualified classes.
- Fixed operator bool conversions.
- C99 restrict is now always on for C compiling.
- C99 dynamic sizeof works.
- Fixed numerous bugs with namespaces and templates.
- Redid how macro expansion worked to bring it in line with C99.
This can break existing code.
- operator->() can now accept any return type.
- Added \dm\include\wctype.h.
- Implemented template explicit instantiation.
- Implemented _finddata_t, _findfirst, _findnext, _findclose.
- Fixed obscure crash bug in exception unwinding.
- Upgraded STLport to reflect improved compiler.
WHAT'S NEW FOR C/C++ 8.31
Oct 17, 2002
- Bugs fixed
- Fixed bug with nested class member templates.
- Fixed bug with inline asm and LGDT/LIDT operand matching.
- Make 5.02
- Now accepts ~ rule flag.
- Command line length increased from 127 to 996.
WHAT'S NEW FOR C/C++ 8.30
Oct 8, 2002
- C
- static and type-qualifier-list now supported for
array dimension per C99 6.7.5.2.
- Variable length arrays (VLAs) per C99 6.7.5.2 now implemented.
- Implemented declarations in clause-I of for
statement per C99 6.8.5.3.
- Implemented mixing statements and declarations per
C99 6.8.2-1.
- Implemented implicit return 0; from main()
per C99 5.1.2.2.3.
- Updated fenv.h functions per C99 7.6.
- C++
- Extended C++ with support for array declarations per C99 6.7.5.2.
- Added type_info to typeinfo.h.
- C and C++
- __declspec(import) now works with DOSX (-mx) memory model by
generating an extra level of indirection like under Win32.
- Bugs fixed
- Fixed internal error cgcod 2347.
- Fixed internal error cgcod 1402.
- Fixed internal error cg87 268.
- Fixed internal error exp2 121.
- Fixed internal error newman 963.
- Fixed problem with template overload resolution.
- Fixed forward template instantiation bug.
- Fixed partial ordering with constants.
WHAT'S NEW FOR C/C++ 8.29
Jul 31, 2002
- C++
- Implemented member template functions.
- Implemented member template classes.
- Implemented class template partial specializations.
- Implemented partial ordering of class template specializations.
- Implemented class template explicit specializations.
- Implemented template friends.
- Implemented new C++ 98 for statement scoping rules. This
can be disabled with -A- (for backwards compatibility with
old code), and then re-enabled with -As.
- For C++, changed 3rd operand of conditional operator from
a conditional-expression to an assignment-expression.
There is no switch to revert to the old behavior.
- Operator delete can now take cv-qualified pointers.
- main() now defaults to return 0; if no return
is specified.
- Implemented function try blocks.
- Function templates instantiations that match non-template function
declarations are now distinct functions. This can break some existing
code, but the source fixes are worth doing to be standard compliant.
Function template instantiations
now include the template-argument-list as part of the function signature.
- Added -wc switch which warns on every occurance of a C style
cast which should be replaced with the appropriate C++ style cast.
- Mangled names can now be considerably longer.
- Added STLport 4.5.3.
- Fixed el 2005 bug
- C and C++
- Implemented universal character names for strings and character literals.
- Fixed iasm 2585 bug
- Fixed error parsing REP MOVSD/CMPSD instructions
- Unrecognized preprocessing directives are now ignored in false
conditionals (previously, an error was issued). -A will
cause them to be an error.
- Fixed problem with -s stack probes in 16 bit code.
- Non-existing directories are now created as necessary when
writing output files. This is convenient when writing .obj files
to temporary directories.
WHAT'S NEW FOR C/C++ 8.28
May 22, 2002
- Added empty base class optimization.
- Added -Jb compiler switch to disable empty base class optimization
for compatibility with code compiled with earlier compilers.
- Fixed cgobj 3034 bug
- Fixed cg87 256 bug
- Added:
#pragma DMC mfc
for compatibility with MFC 4.2.
- Added -Aa- for compatibility with MFC 4.2.
- Empty array members of structs, such as:
char string[];
are now aligned based on the array subtype, rather
than the widest type.
- Fixed bug with unsigned to double conversion.
- Fixed problem with handle passed to DllMain().
WHAT'S NEW FOR C/C++ 8.27
Mar 6, 2002
- Renamed dm\include\strstrea.h to dm\include\strstream.h
- Fixed problem with disp_cursorcol and standout mode in win32 version
- Fixed bug with inline asm and copy propagation
- Fixed eh 683 bug
- Fixed cod1 1278 bug
- Fixed cg87 217 bug
- Now aligns double autos for faster floating point execution
- Added inline assembler support for Intel SSE and SSE2 instructions
- Added inline assembler support for AMD 3DNOW! instructions
- Added new instructions to OBJ2ASM disassembler
WHAT'S NEW FOR C/C++ 8.26
Jan 23, 2002
- Added \dm\include\zmouse.h
- Fixed bug in float.h
- Improved code generation for long long's.
- Fixed long double conversions and unsigned long long's.
- Fixed tentative definition bug.
WHAT'S NEW FOR C/C++ 8.25
Dec 14, 2001
- Added MicroEmacs text editor.
- Fixed IDDE Resource Editor.
- Fixed startup code to be compatible with D.
For C:
- Fixed bugs with 16 bit code generation.
WHAT'S NEW FOR C/C++ 8.23
For C++:
- Fixed eh 682 bug.
- Fixes for problems with template instantiation and exception handling.
For C:
- Fixed problems with C, -A, preprocessor, and //.
- Fixed dos_setdrive() bug for win32.
- Fix for _inpw() and _outpw() for DOSX.
WHAT'S NEW FOR C/C++ 8.22
10/28/01
For C:
- Increased max string length.
- Fixed cg87 263 error.
For C++:
- Fixed bug with -D_MT and STL.
- Fixed template expansion bug with array constructors.
STL:
- Fixed stl_config.h conflict with windows.h
Library:
- Fixed bug in _kbhit() for Win32.
WHAT'S NEW FOR C/C++ 8.20
For C++:
- Added SGI STL 3.3. Numerous fixes to support it.
- Templates are now instantiated only when semantically required,
rather than whenever referred to.
- Added header files cassert, cctype, cerrno, cfloat, ciso646,
climits, clocale, cmath, csetjmp, csignal, cstdarg, cstddef, cstdio,
cstdlib, cstring, ctime, cwchar, cwctype, new.
- Fixed C++ declarations for strchr(), etc., per C++98 21.4.
- Fixed warnings about 0 sized structs used before set.
- Fixed default constructor bug with new(p) char().
- Fixed unused operator->() expansion inside template spurious error.
- In-class static const integral initializers now supported.
- Fixed default template parameter bug.
WHAT'S NEW FOR C/C++ 8.1e
For C++:
- -Ab and -Aw are now always on
(meaning that bool and wchar_t
are real types, not typedefs).
Warning: This can break existing code.
- -Aa is now always on
(meaning that operator new[] and operator delete[]
are separately overloadable)
Warning: This can break existing code.
- parameter-declarations now allowed in function template
template-parameter-list.
- typename can now appear in template-parameter
instead of class.
- Explicit template function template-arguments implemented.
- Partial ordering of function templates implemented.
- elaborated-type-specifier (i.e. typename) implemented.
- mutable implemented.
- explicit implemented.
WHAT'S NEW FOR C/C++ 8.1d
- Fixed code gen bug with -Ab.
- Fixed name mangling with complex floating point types.
- Fixed code gen bug with complex floating point types.
- stdlib.h now compiles with -A.
- Added util.h.
WHAT'S NEW FOR C/C++ 8.1c
- Regular Expressions now added to runtime library.
- Fixed code gen bugs with __interrupt functions.
- rint functions are now inlined by the compiler.
- fabsl and sqrtl are now inlined by the compiler.
- Fixed bug with /= for long doubles.
- Fixed long long support in library.
- Improved long double support in library.
WHAT'S NEW FOR C/C++ 8.1A
- Name mangling for type bool is changed from _X to _N, in order
to be more compatible with VC.
- Literal float support has now been brought in line with ANSI
C99.
- Floating point constants for other than static initializations are
not folded if the folding would result in any exception flags being
raised. This is per C99. To always fold the constants anyway, use the
-ff (fast float) flag.
- Fixed problems with hex long doubles.
WHAT'S NEW FOR C/C++ 8.18
- Hex floats no longer turned off by -A.
- Long longs no longer turned off by -A.
- // comments in C no longer turned off by -A.
- The default CPU target is now the Pentium Pro (-6), not the Pentium.
WHAT'S NEW FOR C/C++ 8.17
- Fixed problem with dllexport on function pointers.
- Added gc.h
- Added Hans Boehm garbage collector to rtl
- Added long double, %a and %A support to printf for win32
WHAT'S NEW FOR C/C++ 8.16
- Fixed 16 bit code gen bugs.
- Added iso646.h
- Added stdint.h
- Added stdbool.h
- Added va_copy() to stdarg.h
- Added isxxxx() floating point comparison macros to math.h
WHAT'S NEW FOR C/C++ 8.15
- Fixed spurious syntax error compiling some MFC code.
WHAT'S NEW FOR C/C++ 8.13
- Now with 32 bit X32 DOS extender support!
- Fixed code generator support for X32.
WHAT'S NEW FOR C/C++ 8.12
- Changed __i keyword to __imaginary due to numerous conflicts
with existing code.
WHAT'S NEW FOR C/C++ 8.10
- Added support for __restrict pointer syntax.
- Added support for macros with variable & blank argument lists per C99.
- Added support for __func__ per C99 6.4.2.2.
- Added __FUNCTION__ predefined macro.
- Added __PRETTY_FUNCTION__ predefined macro.
- Fixed bug in wcscmp() for 0 length strings.
- -Aa switch to SC is now the default. There is no way to turn it off.
- Added _Complex and _Imaginary type support per C99.
- Renamed C++ complex class file complex.h to oldcomplex.h.
- Added new complex.h per C99.
- Added complex library functions per C99.
- Added isinf() per C99.
- Added long double support to isxxx() functions in fp.h.
WHAT'S NEW FOR C/C++ 8.0
- Added __DMC__ predefined macro.
- Added -d switch to generate make dependency information.
- Added debug statements.
- Added debug declarations.
- Added Contract Programming features.
- Added ability to embed C in HTML files.
- Added native support for 80 bit long doubles (Win32 only).
- Added support for CPU bit instructions via functions in bitops.h.
- Switch -mn is now the default instead of -ms.
- 16 bit preprocessor spp.exe no longer supported - use sppn.exe.
WHAT'S NEW FOR C/C++ 7.6
- Better Code Generation
- Merged C and C++ Compilers.
They are now in the same executable. This saves disk space and testing
time.
WHAT'S NEW FOR C/C++ 7.5
Added MMX Extensions
New Intel MMX instructions now supported by the inline assembler.
Added Support for Alternative Names
With -A and the C++ compiler, the alternative representations
in the standard 2.9 are now supported. In the future, they will
become the default, so don't use the following names otherwise:
and and_eq bitand bitor compl not
not_eq or or_eq xor xor_eq
Added -B[e|f|g|j] switches
See "Definitive list of SC switches" for how they work.
The SCMSGS environment variable and SC.INI setting is no
longer supported.
Added #elseif directive, with same semantics as #elif.
Changed overload resolution rules to reflect ANSI C++ standard changes
regarding integral promotions vs integral conversions.
Added namespaces
Added -g5 switch
See "Definitive list of SC switches".
Added #pragma setlocale("locale")
See "Pragmas supported by SC/SC++".
Added _CPPRTTI and _CPPUNWIND predefined macros
See "Predefined macros".
Added New Keywords
explicit, mutable, typename - but the semantics of them aren't
implemented.
Added __unaligned Keyword
For unaligned pointer support for PowerPC. Ignored for Intel
compiler.
Added Pentium Pro Instructions to Inline Assembler and OBJ2ASM.
Added new P6 instructions:
CMOVcc
FCMOVcc
FCOMI
FCOMIP
FUCOMI
FUCOMIP
RDMPC
Added -ND switch
See "DEFINITIVE LIST OF SC SWITCHES",
and _MT and _DLL in "PREDEFINED MACROS".
-NLlibfile
Added this switch. See "DEFINITIVE LIST OF SC SWITCHES".
__wacrtused
__wacrtused_con
Added these for use in Win32 UNICODE apps. See "ACRTUSED".
by Walter Bright
Copyright © 1997-2005 by Digital Mars. All Rights Reserved.