www.digitalmars.com         C & C++   DMDScript  

c++.stlsoft - dmc 8.40.2n introduces a problem with stlsoft rectarr.cpp

reply Mario <Mario_member pathlink.com> writes:
Hi,

the update from dmc 8.38.9n to 8.40.2n introduced a problem with the stlsoft
example form ddj rectarr.cpp. Just in case I have added th file ...

In both cases it's the same stlsoft lib which comes with the 8.38 CD version.
Only the compiler was updated.

D:\mario\src\cc\palooza\speed4>dmc -DSTRINGTOK_STLSOFT -o+speed -Id:\mario\dm\st
lsoft -odmc_rectarr.exe rectarr.cpp
link rectarr,dmc_rectarr.exe,,user32+kernel32/noi;

Digital Mars C/C++ Compiler Version 8.38.9n
Copyright (C) Digital Mars 2000-2003.  All Rights Reserved.
Written by Walter Bright
www.digitalmars.com

C:\mario\src\cc\palooza\speed4>dmc -DSTRINGTOK_STLSOFT -o+speed
-Ic:\mario\dm\stlsoft -odmc_rectarr.exe rectarr.cpp
c:\mario\dm\stlsoft\stlsoft_iterator.h(675) : Error: function expected
Internal error: template 1902
--- errorlevel 1

Digital Mars C/C++ Compiler Version 8.40.2n
Copyright (C) Digital Mars 2000-2004.  All Rights Reserved.
Written by Walter Bright
www.digitalmars.com


Thanks in advance

-- Mario


begin 0644 rectarr.cpp
M+RH +R\O+R\O+R\O+R\O+R\O+R\O+R\O+R\O+R\O+R\O+R\O+R\O+R\O+R\O
M+R\O+R\O+R\O+R\O+R\O+R\O+R\O+R\O+R\O+R\O+R\O+R\-"B`J($9I;&4Z
M"0ER96-T87)R+F-P<`T*("H-"B`J(%!U<G!O<V4Z"0E497-T('!R;V=R86T 
M9F]R(%)E8W1A;F=U;&%R(&%R<F%Y<PT*("H-"B`J($-R96%T960)"3$V=&  



M>6YE<VES+F-O;2YA=2]S;V9T=V%R90T*("H-"B`J("\O+R\O+R\O+R\O+R\O
M+R\O+R\O+R\O+R\O+R\O+R\O+R\O+R\O+R\O+R\O+R\O+R\O+R\O+R\O+R\O



M"G1Y<&5D968)<W1L<V]F=%]N<U]Q=6%L*&)A<VEC7W-I;7!L95]S=')I;F<I
M/&-H87(^"0ES=')I;F=?=#L-"G1Y<&5D968 <W1L<V]F=%]N<U]Q=6%L*&9I
M>&5D7V%R<F%Y7S-D*3QS=')I;F=?=#X
M(&1E9FEN960H5TE.,S(I('Q\(%P-"B` ("!D969I;F5D*%]724XS,BD-" T*

M9&5F('=I;G-T;%]N<U]Q=6%L*'!E<F9O<FUA;F-E7V-O=6YT97(I"0EP97)F

M<W1L7W!E<F9O<FUA;F-E7V-O=6YT97(N:#X-"G1Y<&5D968 =6YI>'-T;%]N
M<U]Q=6%L*'!E<F9O<FUA;F-E7V-O=6YT97(I"7!E<F9O<FUA;F-E7V-O=6YT
M97)?=#L-
M+R\O+R\O+R\O+R\O+R\O+R\O+R\O+R\O+R\O+R\O+R\O+R\O+R\O+R\O+R\O




M9&5F:6YE(%]S:6YT-C1?9FUT("` ("(E238T9"(-"B`C9&5F:6YE(%]U:6YT
M-C1?9FUT("` ("(E238T=2(-"B-E;&EF(&1E9FEN960H7U]$34-?7RD ?'P 
M7`T*("` ("` 9&5F:6YE9"A?7TU715)+4U]?*0T*("-D969I;F4 7W-I;G0V



M*B`O+R\O+R\O+R\O+R\O+R\O+R\O+R\O+R\O+R\O+R\O+R\O+R\O+R\O+R\O

M;G0)5T%235504PD)"3T),CL-"F-O;G-T(&EN=`E$149?251%4D%424].4PD]


M+R\O+R\O+R\O+R\O+R\O+R\O+R\O+R\O+R\O+R\O+R\O+R\O+R\O+R\O+R\O

M:&4 <&%I;F9U;"!M97-S('1H870 :7, 8V]M<&EL:6YG('=I=&  ;6%X("8 






M<F=C(#X ,2D /R!A=&]I*&%R9W9;,5TI(#H ,#L-" EI;G0)"0D)"0E$,`D)
M"3T)*&%R9V, /B`R*2`_(&%T;VDH87)G=ELR72D .B`P.PT*"6EN=`D)"0D)



M051)3TY3"3T):6YT7VUA>"A)5$52051)3TY3+"!$149?251%4D%424].4RD[








M/2`P.R!I,"`\($0P.R`K*VDP*0T*"0D)"7L-" D)"0D)<V]U<F-E6S-=(#T 


M,3L *RMI,2D-" D)"0D)>PT*"0D)"0D)<V]U<F-E6S5=(#T )V$G("L *&DQ

M,"D /#P

M,&8I.PT*"0D)"0D)"7-O=7)C95LV72`]("=A)R`K(" H:3( )B`P>&8P*2`\

M8V-E<W, :&5R92`N+BX-" D)"0D)"0EA<G)A>2YA=%]U;F-H96-K960H:3`L

M960 )B!I;F1E>&5D(&%C8V5S<R!H97)E+ T*"0D)"0D)"71O=&%L("L](&%R



M7V9M="`B(&EN("5D(')E<&5A=',[7'1;)60L("5D+"`E9%TZ("5D7&XB+`T*
M"0D)7U]35$Q33T947T-/35!)3$527TQ!0D5,7U-44DE.1RP-" D)"6-O=6YT
M97(N9V5T7VUI;&QI<V5C;VYD<R I+`T*"0D)251%4D%424].4RP-" D)"40P


J+R\O+R\O+R\O+R\O+R\O+R\O+R\O+R\O+R\O+R\O+R\O+R\O+R\O+PT*
`
end
Mar 31 2004
parent reply "Matthew" <matthew stlsoft.org> writes:
Mario

I'm pretty sure this is a flaw with DMC++'s handling of static initialiser
objects (aka Schwarz Counter's). I've mentioned it before to Walter, and
there was a workaround built into various headers - look for
s_performance_counter_class_constructor in winstl_performance_counter.h -
but it looks like 8.40 makes the problem even worse, as the workaround no
longer works at all.

If I can isolate it down sufficiently, I'll post a sample bug on the C++
newsgroup, and hopefully a fix can go in 8.41.

For the moment, the answer is simply to comment out both definitions of
s_performance_counter_class_constructor in winstl_performance_counter.h.
(There's also a similar use of initialisers in
winstl_high_performance_counter.h.)

Cheers

Matthew


"Mario" <Mario_member pathlink.com> wrote in message
news:c4e9kp$1acb$1 digitaldaemon.com...
 Hi,

 the update from dmc 8.38.9n to 8.40.2n introduced a problem with the
stlsoft
 example form ddj rectarr.cpp. Just in case I have added th file ...

 In both cases it's the same stlsoft lib which comes with the 8.38 CD
version.
 Only the compiler was updated.
D:\mario\src\cc\palooza\speed4>dmc -DSTRINGTOK_STLSOFT -o+speed -Id:\mario\d m\st
 lsoft -odmc_rectarr.exe rectarr.cpp
 link rectarr,dmc_rectarr.exe,,user32+kernel32/noi;

 Digital Mars C/C++ Compiler Version 8.38.9n
 Copyright (C) Digital Mars 2000-2003.  All Rights Reserved.
 Written by Walter Bright
 www.digitalmars.com

 C:\mario\src\cc\palooza\speed4>dmc -DSTRINGTOK_STLSOFT -o+speed
 -Ic:\mario\dm\stlsoft -odmc_rectarr.exe rectarr.cpp
 c:\mario\dm\stlsoft\stlsoft_iterator.h(675) : Error: function expected
 Internal error: template 1902
 --- errorlevel 1

 Digital Mars C/C++ Compiler Version 8.40.2n
 Copyright (C) Digital Mars 2000-2004.  All Rights Reserved.
 Written by Walter Bright
 www.digitalmars.com


 Thanks in advance

 -- Mario
Apr 11 2004
parent Scott Michel <scottm mordred.cs.ucla.edu> writes:
In c++ Matthew <matthew stlsoft.org> wrote:
 Mario
 
 I'm pretty sure this is a flaw with DMC++'s handling of static initialiser
 objects (aka Schwarz Counter's). I've mentioned it before to Walter, and
 there was a workaround built into various headers - look for
 s_performance_counter_class_constructor in winstl_performance_counter.h -
 but it looks like 8.40 makes the problem even worse, as the workaround no
 longer works at all.
I wasn't really able to parse the bug here, but if it's something along the lines of "static objects don't get constructed", e.g.: ---- myfile.cxx ---- #include <iostream> struct wombat { wombat(int c_arg) { std::cout << "wombat ctor, carg = " << c_arg << std::endl; } ~wombat() { }; }; static wombat private_marsupial_thingy(1); ---- end of file ---- In the 8.38 compiler, "wombat ctor, carg = 1" wasn't printed b/c static objects' ctors didn't get called. The workaround is to use anonymous namespaces, e.g.: namespace { wombat private_marsupial_thingy(1); }; or upgrade to 8.39. -scooter
Apr 12 2004