Re: initialization of function argument
* Mike Wahler:
<subramanian100in@yahoo.com> wrote in message
void fn(Test arg);
When we call fn() with fn(obj), the copy ctor
is called to construct 'arg'. Am I correct?
Yes.
Question is what kind of initialization - direct
initialization or copy initialization, happens to
construct arg ?
Copy construction.
What does the standard say in this regard ?
I don't have my copy at hand.
See my reply about two hours earlier in this thread. It's often a good
idea to read earlier replies in the thread, before posting.
If copy initialization happens, then if the copy
ctor is 'explicit', then calling fn(obj) will not
compile.
Sure it will.
I'm sorry, it will only compile with a broken compiler (e.g. MSVC).
He is correct.
However, if the copy constructor is declared explicit,
the line
Test copy_init = obj;
will not compile. (VC++ 2005 says:
class 'Test' : no copy constructor available or
copy constructor is declared 'explicit'
Kindly explain
Run my example below.
When I added the word "explicit" to the copy constructor of your
program, and commented out the copy_init declaration,
Comeau C/C++ 4.3.9 (Mar 27 2007 17:24:47) for ONLINE_EVALUATION_BETA1
Copyright 1988-2007 Comeau Computing. All rights reserved.
MODE:strict errors C++ C++0x_extensions
"ComeauTest.c", line 47: error: class "Test" has no suitable copy
constructor
fn(obj);
^
1 error detected in the compilation of "ComeauTest.c".
g++ also failed to compile, whereas Visual C++ did compile it.
So we can conclude that of the three compilers I tested your code with,
one did not handle the "explicit" copy constructor correctly.
Cheers, & hth.,
- Alf
--
A: Because it messes up the order in which people normally read text.
Q: Why is it such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?