Report a bug
If you spot a problem with this page, click here to create a Bugzilla issue.
Improve this page
Quickly fork, edit online, and submit a pull request for this page. Requires a signed-in GitHub account. This works well for small changes. If you'd like to make larger changes you may want to consider using a local clone.

Change Log: 2.037

previous version: 2.036 – next version: 2.038

Download D 2.037
released Dec 3, 2009

New/Changed Features

  • Conditional expressions ?: can now be modifiable lvalues.
  • The type inferred from an ArrayLiteral is now a dynamic array, not a static one.
  • Added support for op= for array.length
  • Array and associative array types are now determined by using ?: across all the elements, not just using the first one.
  • Array concatenation with elements now allows implicit conversion of the elements to the array element type.
  • No more comma operators allowed between [ ].
  • ClassInfo now merged into TypeInfo_Class.
  • Bugzilla 3379: [tdpl] Parameter names not visible in the if clause of a template
  • Bugzilla 3380: [tdpl] typeid(obj) should return the dynamic type of the object
  • Removed -safe command line switch, added -noboundscheck command line switch.
  • Bugzilla 3481: PATCH: opPow(), x ^^ y as a power operator
  • Added opDispatch
  • properties can only have 0 or 1 arguments
  • properties cannot be overloaded with non-properties
  • std.math: Added FloatControl, IeeeFlags for enabling floating-point exceptions.
  • std.math: Inverse trig functions are now pure nothrow.

Bugs Fixed

  • std.array: Fixed unlisted bug in array().
  • Bugzilla 111: appending a dchar to a char[]
  • Bugzilla 2664: OSX standard math functions are less accurate
  • Bugzilla 2802: VariantN.opCmp!(T) fails when T != VariantN
  • Bugzilla 2967: spec does not mention that inline asm is a valid "return" statement
  • Bugzilla 2977: std.random.unpredictableSeed() should use thread ID somewhere
  • Bugzilla 3115: >>> and >>>= generate wrong code
  • Bugzilla 3171: % not implemented correctly for floats
  • Bugzilla 3311: std.range.chain shouldn't have opIndexAssign if arguments aren't mutable
  • Bugzilla 3375: [tdpl] Ternary operator doesn't yield an lvalue
  • Bugzilla 3381: [tdpl] Incorrect assessment of overriding in triangular-shaped hierarchy
  • Bugzilla 3388: [tdpl] contracts should allow throw expressions
  • Bugzilla 3390: [tdpl] out(result) contract should not be able to rebind result
  • Bugzilla 3407: [tdpl] Compiling with -safe -release must keep all bound checks
  • Bugzilla 3433: [tdpl] Comparing structs for equality is not member-by-member
  • Bugzilla 3469: ICE(func.c): Regression. Calling non-template function as a template, from another module
  • Bugzilla 3478: "no effect in expression" error on return to void
  • Bugzilla 3494: Segfault(mtype.c) using typeof(return) inside an auto function
  • Bugzilla 3495: Segfault(typinf.c) instantiating D variadic function with too few arguments
  • Bugzilla 3496: ICE(cgelem.c, optimizer bug) cast(void *)(x&1)== null.
  • Bugzilla 3502: Fix for dropped Mac OS X 10.5
  • Bugzilla 3521: Optimized code access popped register
  • Bugzilla 3540: Another DWARF line number fix
  • Bugzilla 3551: nested struct => dmd adds a hidden pointer
  • Bugzilla 3553: ICE when a function argument defaults to __LINE__
previous version: 2.036 – next version: 2.038