------- Comment #4 from fang at csl dot cornell dot edu 2006-07-13 22:06 ------- Subject: Re: error: ' error: 'MyClass::MyClass(const MyClass&)' is private error: within this context
> ------- Comment #3 from kk at microfocus dot com 2006-07-13 21:49 ------- > (In reply to comment #2) > > If it is in our (Rogue Wave) current code, could you please let us know > > where > > so we can look into fixing it? (It's doesn't matter whther gcc does the > > right > > thing here or not, our code should be portable either way.) Thanks! > > OK, here goes. This is what I'm getting. If you guys do have a fix let me > know. > You have an operator overload for the Expr but it really can't be used in this > case cause the const constructor is private. Here's a test case to demonstrate a workaround or solution: --------------->8 snip 8<---------------- class foo { private: foo(const foo&); public: explicit foo(int) { } // HERE's the magic operator foo& () { return *this; } }; class streamer { public: streamer& operator << (const foo&) { return *this; } }; int main(int, char*[]) { streamer s; s << foo(0) << foo(1); return 0; } --------------->8 snip 8<---------------- All I've done is add a reference converter operator to the class with the private copy-constructor. Try commenting out the magic line to see the difference in compilability on 4.0 and higher. This works with -W -Wall -Werror -ansi -pedantic-errors for g++ versions 3.3, 4.0, 4.2. (don't have 3.4, 4.1 handy) I admit this might not be a pretty solution, but it requires a one-line addition to get things going. Comments and suggestions welcome. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28365