
"Bronek Kozicki" <brok@rubikon.pl> ha scritto nel messaggio news:3sflue4cj1fw.xzo45r0v4i7n.dlg@40tude.net...
On Thu, 15 Apr 2004 20:34:19 +0200, Andrea Torsello wrote:
I tested the code with gcc 3.3.1 and successfully compiled it with comeau online.
Here you have some results from different compilers.
Great thanks!
MSVC71 non-const lvalue copy contructor explicit copy constructor non-const rvalue move constructor non-const rvalue move constructor non-const rvalue move constructor non-const rvalue move constructor non-const lvalue copy contructor explicit copy constructor non-const rvalue move constructor non-const rvalue move constructor discriminate: non-const lvalue discriminate: const value non-const rvalue move constructor discriminate: non-const rvalue non-const rvalue move constructor discriminate: const value
const rvalues get treated like non-const rvalues. I never noticed it because I never return const temporaries, but the same happens on gcc 3.3.1. Does the same happen with mojo? I ask because the const vs temporary deduction is taken almost verbatim from it
Comeau in relaxed mode (no -a , no -A options set, backend is MSVC71) non-const lvalue copy contructor explicit copy constructor non-const lvalue copy contructor explicit copy constructor non-const lvalue copy contructor const copy constructor const copy constructor discriminate: non-const lvalue discriminate: const value discriminate: non-const lvalue discriminate: const value
Comeau cannot discriminate temporaries in relaxed mode but can in strict mode
Comeau in strict mode (-A options set) non-const lvalue copy contructor explicit copy constructor non-const rvalue move constructor explicit copy constructor non-const rvalue move constructor explicit copy constructor
Looks like all copy constructor of the form X x2(x1); use the explicit constructor. I wonder what happens with the more common X x2=x1;
non-const rvalue move constructor non-const rvalue move constructor non-const lvalue copy contructor const copy constructor non-const rvalue move constructor non-const rvalue move constructor non-const rvalue move constructor const copy constructor discriminate: non-const lvalue discriminate: const value non-const rvalue move constructor discriminate: non-const rvalue non-const rvalue move constructor discriminate: const value
everything else works OK. I have attached a new version with an easyer output to parse. It also changes the constructors from the form X x2(x1); to X x2=x1; Can you please re-run the tests? Thank you. Andrea Torsello P.S. Here's the output for gcc 3.3.1 The const temporaries are not treated as consts in this case as well. Constructors -- Copy non-const lvalue non-const lvalue copy contructor -- Copy const lvalue const copy constructor -- Copy non-const rvalue non-const rvalue move constructor non-const rvalue move constructor -- Copy const rvalue non-const rvalue move constructor const copy constructor Pass by const ref -- Pass non-const lvalue -- Pass const lvalue -- Pass non-const rvalue non-const rvalue move constructor -- Pass const rvalue non-const rvalue move constructor Pass by value -- Pass non-const lvalue non-const lvalue copy contructor -- Pass const lvalue const copy constructor -- Pass non-const rvalue non-const rvalue move constructor non-const rvalue move constructor -- Pass const rvalue non-const rvalue move constructor const copy constructor Discriminate -- Pass non-const lvalue discriminate: non-const lvalue -- Pass const lvalue discriminate: const value -- Pass non-const rvalue -- Pass const rvalue non-const rvalue move constructor discriminate: const value begin 666 move_test.cc M(VEN8VQU9&4\:6]S=')E86T^#0H-"@T*=7-I;F<@<W1D.CIC;W5T.PT*=7-I M;F<@<W1D.CIE;F1L.PT*#0IN86UE<W!A8V4@;6]V90T*>PT*"71E;7!L871E M(#QC;&%S<R!4/B!S=')U8W0@96YA8FQE9 T*"7L-"@D)8VQA<W,@8V]N<W1A M;G0@+R\@='EP92!S=6=A<B!F;W(@8V]N<W1A;G1S#0H)"7L-"@D)8V]N<W0@ M5"H@9&%T85\[#0H)"7!U8FQI8SH-"@D)97AP;&EC:70@8V]N<W1A;G0H8V]N M<W0@5"8@;V)J*2 Z(&1A=&%?*"9O8FHI('M]#0H)"6-O;G-T(%0F(&=E="@I M(&-O;G-T('L@<F5T=7)N("ID871A7SL@?0T*"0E].PT*#0H)"6-L87-S('1E M;7!O<F%R>2 Z('!R:79A=&4@8V]N<W1A;G0@+R\@='EP92!S=6=A<B!F;W(@ M=&5M<&]R87)I97,-"@D)>PT*"0EP=6)L:6,Z#0H)"65X<&QI8VET('1E;7!O M<F%R>2A4)B!O8FHI(#H@8V]N<W1A;G0H;V)J*2![?0T*"0E4)B!G970H*2!C M;VYS="![(')E='5R;B!C;VYS=%]C87-T/%0F/BAC;VYS=&%N=#HZ9V5T*"DI M.R!]#0H)"7T[#0H-"@EO<&5R871O<B!T96UP;W)A<GDH*0T*"7L-"@D@(" @ M<F5T=7)N('1E;7!O<F%R>2AS=&%T:6-?8V%S=#Q4)CXH*G1H:7,I*3L-"@E] M#0H);W!E<F%T;W(@8V]N<W1A;G0H*2!C;VYS= T*"7L-"@D@(" @<F5T=7)N M(&-O;G-T86YT*'-T871I8U]C87-T/&-O;G-T(%0F/B@J=&AI<RDI.PT*"7T- M"@T*#0H)<')O=&5C=&5D.@T*"0EE;F%B;&5D*"D@>WT@+R\@:6YT96YD960@ M=&\@8F4@9&5R:79E9"!F<F]M#0H)"7YE;F%B;&5D*"D@>WT@+R\@:6YT96YD M960@=&\@8F4@9&5R:79E9"!F<F]M#0H)?3L-"GT-"@T*=&5M<&QA=&4\='EP M96YA;64@5#X-"F-L87-S(%D@.B!P=6)L:6,@;6]V93HZ96YA8FQE9#Q9/%0^ M(#X-"GL-"G!U8FQI8SH-"G1Y<&5D968@='EP96YA;64@;6]V93HZ96YA8FQE M9#Q9/%0^(#XZ.G1E;7!O<F%R>2!T96UP;W)A<GD[#0IT>7!E9&5F('1Y<&5N M86UE(&UO=F4Z.F5N86)L960\63Q4/B ^.CIC;VYS=&%N="!C;VYS=&%N=#L- M"@T*62@I('M]#0H-"F5X<&QI8VET(%DH63Q4/B!C;VYS=" F*2![(&-O=70@ M/#P@(F5X<&QI8VET(&-O<'D@8V]N<W1R=6-T;W)<;B([('T-"EDH63Q4/B8I M('L@8V]U=" \/" B;F]N+6-O;G-T(&QV86QU92!C;W!Y(&-O;G1R=6-T;W)< M;B([('T-"EDH8V]N<W1A;G0I('L@8V]U=" \/" B8V]N<W0@8V]P>2!C;VYS M=')U8W1O<EQN(CL@?0T*62AT96UP;W)A<GDI('L@8V]U=#P\(")N;VXM8V]N M<W0@<G9A;'5E(&UO=F4@8V]N<W1R=6-T;W)<;B([('T-"GT[#0H-"@T*=&5M M<&QA=&4\='EP96YA;64@5#X-"ED\5#X@;6%K95DH*2![<F5T=7)N(%D\5#XH M*3M]#0H-"G1E;7!L871E/'1Y<&5N86UE(%0^#0IC;VYS="!9/%0^(&UA:V59 M8V]N<W0H*2![<F5T=7)N(%D\5#XH*3M]#0H-"@T*=&5M<&QA=&4\='EP96YA M;64@5#X-"G9O:60@9V5T62A9/%0^*2![?0T*#0IT96UP;&%T93QT>7!E;F%M M92!4/@T*=F]I9"!G9719<F5F*%D\5#XF*2![?0T*#0IT96UP;&%T93QT>7!E M;F%M92!4/@T*=F]I9"!G97198V]N<W1?<F5F*%D\5#X@8V]N<W0@)BD@>WT- M"@T*#0IT96UP;&%T93QT>7!E;F%M92!4/@T*=F]I9"!D:7-C<FEM:6YA=&4H M63Q4/B8I('MC;W5T(#P\(")D:7-C<FEM:6YA=&4Z(&YO;BUC;VYS="!L=F%L M=65<;B([?0T*#0IT96UP;&%T93QT>7!E;F%M92!4/@T*=F]I9"!D:7-C<FEM M:6YA=&4H='EP96YA;64@63Q4/CHZ8V]N<W1A;G0I('MC;W5T(#P\(")D:7-C M<FEM:6YA=&4Z(&-O;G-T('9A;'5E7&XB.WT-"@T*=&5M<&QA=&4\='EP96YA M;64@5#X-"G9O:60@9&ES8W)I;6EN871E*'1Y<&5N86UE(%D\5#XZ.G1E;7!O M<F%R>2D@>V-O=70@/#P@(F1I<V-R:6UI;F%T93H@;F]N+6-O;G-T(')V86QU M95QN(CM]#0H-"FEN="!M86EN*"D-"GL-"ED\:6YT/B!Y,3L-"ED\:6YT/B!C M;VYS="!Y,CL-"@T*#0IC;W5T(#P\(")#;VYS=')U8W1O<G-<;EQN(CL-"F-O M=70@/#P@(BTM($-O<'D@;F]N+6-O;G-T(&QV86QU95QN(CL-"ED\:6YT/B!T M,3UY,3L@+R]C;W!Y(&YO;BUC;VYS="!L=F%L=64-"F-O=70@/#P@(BTM($-O M<'D@8V]N<W0@;'9A;'5E7&XB.PT*63QI;G0^('0R/7DR.R O+V-O<'D@8V]N M<W0@;'9A;'5E#0IC;W5T(#P\("(M+2!#;W!Y(&YO;BUC;VYS="!R=F%L=65< M;B([#0I9/&EN=#X@=#,];6%K95D\:6YT/B@I.R O+V-O<'D@=&5M<&]R87)Y M#0IC;W5T(#P\("(M+2!#;W!Y(&-O;G-T(')V86QU95QN(CL-"ED\:6YT/B!T M-#UM86ME66-O;G-T/&EN=#XH*3L@+R]C;W!Y(&-O;G-T('1E;7!O<F%R>0T* M#0IC;W5T(#P\(")<;E!A<W,@8GD@8V]N<W0@<F5F7&Y<;B([#0IC;W5T(#P\ M("(M+2!087-S(&YO;BUC;VYS="!L=F%L=65<;B([#0IG97198V]N<W1?<F5F M*'DQ*3L@+R]P87-S+6)Y+6-O;G-T+7)E9B!N;VXM8V]N<W0@;'9A;'5E#0IC M;W5T(#P\("(M+2!087-S(&-O;G-T(&QV86QU95QN(CL-"F=E=%EC;VYS=%]R M968H>3(I.R O+W!A<W,M8GDM8V]N<W0M<F5F(&-O;G-T(&QV86QU90T*8V]U M=" \/" B+2T@4&%S<R!N;VXM8V]N<W0@<G9A;'5E7&XB.PT*9V5T66-O;G-T M7W)E9BAM86ME63QI;G0^*"DI.R O+W!A<W,M8GDM8V]N<W0M<F5F(&YO;BUC M;VYS="!T96UP;W)A<GD-"F-O=70@/#P@(BTM(%!A<W,@8V]N<W0@<G9A;'5E M7&XB.PT*9V5T66-O;G-T7W)E9BAM86ME66-O;G-T/&EN=#XH*2D[+R]P87-S M+6)Y+6-O;G-T+7)E9B!C;VYS="!T96UP;W)A<GD-"@T*8V]U=" \/" B7&Y0 M87-S(&)Y('9A;'5E7&Y<;B([#0IC;W5T(#P\("(M+2!087-S(&YO;BUC;VYS M="!L=F%L=65<;B([#0IG9719*'DQ*3L@+R]P87-S+6)Y+79A;'5E(&YO;BUC M;VYS="!L=F%L=64-"F-O=70@/#P@(BTM(%!A<W,@8V]N<W0@;'9A;'5E7&XB M.PT*9V5T62AY,BD[("\O<&%S<RUB>2UV86QU92!C;VYS="!L=F%L=64-"F-O M=70@/#P@(BTM(%!A<W,@;F]N+6-O;G-T(')V86QU95QN(CL-"F=E=%DH;6%K M95D\:6YT/B@I*3L@+R]P87-S+6)Y+79A;'5E(&YO;BUC;VYS="!T96UP;W)A M<GD-"F-O=70@/#P@(BTM(%!A<W,@8V]N<W0@<G9A;'5E7&XB.PT*9V5T62AM M86ME66-O;G-T/&EN=#XH*2D[("\O<&%S<RUB>2UV86QU92!N;VXM8V]N<W0@ M=&5M<&]R87)Y#0H-"F-O=70@/#P@(EQN1&ES8W)I;6EN871E7&Y<;B([#0IC M;W5T(#P\("(M+2!087-S(&YO;BUC;VYS="!L=F%L=65<;B([#0ID:7-C<FEM M:6YA=&4\:6YT/BAY,2D[("\O;F]N+6-O;G-T(&QV86QU90T*8V]U=" \/" B M+2T@4&%S<R!C;VYS="!L=F%L=65<;B([#0ID:7-C<FEM:6YA=&4\:6YT/BAY M,BD[("\O8V]N<W0@;'9A;'5E#0IC;W5T(#P\("(M+2!087-S(&YO;BUC;VYS M="!R=F%L=65<;B([#0HO+V1I<V-R:6UI;F%T93QI;G0^*&UA:V59/&EN=#XH M*2D[("\O;F]N+6-O;G-T('1E;7!O<F%R>0T*8V]U=" \/" B+2T@4&%S<R!C M;VYS="!R=F%L=65<;B([#0ID:7-C<FEM:6YA=&4\:6YT/BAM86ME66-O;G-T M/&EN=#XH*2D[("\O8V]N<W0@=&5M<&]R87)Y#0H-"@T*<F5T=7)N(# [#0I] ` end