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());
> }
>