Also see CWG issue 391:
http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#391
which will make our behavior non-conforming in C++0X.
-Howard
On Mar 13, 2006, at 4:02 PM, David Fang wrote:
Hi,
Didn't see a reply yet, so I'll chime in.
The relevant text appears in gcc-3.4's release notes:
"When binding an rvalue of class type to a reference, the copy
constructor
of the class must be accessible."
PR 12226 seems to be the mother bug related to this (many dupes).
Fang
foo.cc: In function ¡Ævoid foo(const B&)¡Ç:
foo.cc:3: error: ¡ÆB::B(const B&)¡Ç is private
foo.cc:13: error: within this context
I don't understand why, as I don't see the copy constructor being
used
anywhere. It seems to me this code should create a temporary for the
duration of the statement, and pass the temporary as a reference to
b.fn. This code compiles with icc with no errors.
What is wrong with this code?
class B {
private:
B(const B&);
void operator=(const B&);
public:
B();
void fn(const B &other) const;
};
void foo (const B& b)
{
b.fn(B());
}