Weird writeln behavior with associative arrays

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Fri Oct 15 08:22:08 PDT 2010


On 10/15/2010 10:04 AM, Jens Mueller wrote:
> Hi,
>
> this program
> import std.stdio;
>
> void main() {
> 	double[string] foo;
> 	foo["test"] = 10;
> 	foo["atadfest"] = 10;
> 	// fails if foo.length>  1
> 	writeln(foo);
> }
>
> fails with:
> phobos/std/format.d(1088): Enforcement failed
>
> Am I not allowed to to this? If I have only one element, then it works
> as expected. If I change double to int, then I get "test:10 a:10". So
> somehow only the first character is displayed. Maybe a phobos bug? Any
> ideas?
>
> I'm using Linux and latest dmd.
> $ dmd | head -n1
> Digital Mars D Compiler v2.049
>
> Jens

This is odd. I can't reproduce your bug. Line 1088 is:

     enforce(f.spec == 's');

because indeed the default formatting specifier is "%s". Could there be 
a lack of sync between the compiled library and the import files? For 
example, if the layout of the internal format structure has changed, 
then f.spec will have the wrong offset.


Andrei


More information about the Digitalmars-d mailing list