Boost logo

Boost :

From: Andrea Torsello (torsello_at_[hidden])
Date: 2004-04-15 15:06:12


"Bronek Kozicki" <brok_at_[hidden]> ha scritto nel messaggio
news:3sflue4cj1fw.xzo45r0v4i7n.dlg_at_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_at_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_at_9&%T85\[#0H)"7!U8FQI8SH-"@D)97AP;&EC:70_at_8V]N<W1A;G0H8V]N
M<W0_at_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_at_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_at_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_at_J=&AI<RDI.PT*"7T-
M"@T*#0H)<')O=&5C=&5D._at_T*"0EE;F%B;&5D*"D@>WT@+R\@:6YT96YD960@
M=&\@8F4_at_9&5R:79E9"!F<F]M#0H)"7YE;F%B;&5D*"D@>WT@+R\@:6YT96YD
M960@=&\@8F4_at_9&5R:79E9"!F<F]M#0H)?3L-"GT-"@T*=&5M<&QA=&4\='EP
M96YA;64_at_5#X-"F-L87-S(%D_at_.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_at_I('M]#0H-"F5X<&QI8VET(%DH63Q4/B!C;VYS=" F*2![(&-O=70@
M/#P@(F5X<&QI8VET(&-O<'D_at_8V]N<W1R=6-T;W)<;B([('T-"EDH63Q4/B8I
M('L_at_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_at_8V]U=" \/" B8V]N<W0_at_8V]P>2!C;VYS
M=')U8W1O<EQN(CL@?0T*62AT96UP;W)A<GDI('L_at_8V]U=#P\(")N;VXM8V]N
M<W0@<G9A;'5E(&UO=F4_at_8V]N<W1R=6-T;W)<;B([('T-"GT[#0H-"@T*=&5M
M<&QA=&4\='EP96YA;64_at_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_at_5#X-"G9O:60_at_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_at_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_at_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_at_5#X-"G9O:60_at_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_at_8V]N<W0@;'9A;'5E7&XB.PT*63QI;G0^('0R/7DR.R O+V-O<'D_at_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_at_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_at_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_at_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_at_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_at_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_at_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


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk