N
nutty
Hi all,
I have the following problem ( explanation below code ):
// main.cpp
class noncopyable
{
protected:
noncopyable() {}
~noncopyable() {}
private: // emphasize the following members are private
noncopyable( const noncopyable& );
const noncopyable& operator=( const noncopyable& );
};
class MyClass: noncopyable
{
public:
MyClass( ) { }
};
class IFormatter
{
public:
void func( const MyClass& ) { }
virtual ~IFormatter( ){}
};
int main()
{
MyClass mc;
IFormatter f;
f.func( MyClass( ) ); // doesn't work
f.func( mc ); // works
return 0;
}
This code is accepted by comeau in strict mode and by all MSVC that I
had used 7.0 up to 8.0
..
gcc 4.0.2 complains that the copy constructor of MyClass is private.
Now I wannted to further simplify by removing the noncopyable base and
instead making the copy and assignment private in MyClass.
class MyClass
{
public:
MyClass( ) { }
private:
MyClass( MyClass const& );
MyClass const& operator=( MyClass const& );
};
class IFormatter
{
public:
void func( MyClass const& ) { }
virtual ~IFormatter( ){}
};
int main()
{
MyClass mc;
IFormatter f;
f.func( MyClass( ) );
return 0;
}
surprisingly, now even comeau complains:
Comeau C/C++ 4.3.3 (Aug 6 2003 15:13:37) for ONLINE_EVALUATION_BETA1
Copyright 1988-2003 Comeau Computing. All rights reserved.
MODE:strict errors C++
"ComeauTest.c", line 35: error: "MyClass::MyClass(const MyClass &)",
required for
copy that was eliminated, is inaccessible
f.func( MyClass( ) );
^
Could it be possible that comeau is wrong for one or the other example?
Or did I change something significantly in my simplification?
Could someone try this with a gcc 4.1.x or 3.x.x ?
I appreciate your help and thank you in advance.
Ingo
I have the following problem ( explanation below code ):
// main.cpp
class noncopyable
{
protected:
noncopyable() {}
~noncopyable() {}
private: // emphasize the following members are private
noncopyable( const noncopyable& );
const noncopyable& operator=( const noncopyable& );
};
class MyClass: noncopyable
{
public:
MyClass( ) { }
};
class IFormatter
{
public:
void func( const MyClass& ) { }
virtual ~IFormatter( ){}
};
int main()
{
MyClass mc;
IFormatter f;
f.func( MyClass( ) ); // doesn't work
f.func( mc ); // works
return 0;
}
This code is accepted by comeau in strict mode and by all MSVC that I
had used 7.0 up to 8.0
..
gcc 4.0.2 complains that the copy constructor of MyClass is private.
Now I wannted to further simplify by removing the noncopyable base and
instead making the copy and assignment private in MyClass.
class MyClass
{
public:
MyClass( ) { }
private:
MyClass( MyClass const& );
MyClass const& operator=( MyClass const& );
};
class IFormatter
{
public:
void func( MyClass const& ) { }
virtual ~IFormatter( ){}
};
int main()
{
MyClass mc;
IFormatter f;
f.func( MyClass( ) );
return 0;
}
surprisingly, now even comeau complains:
Comeau C/C++ 4.3.3 (Aug 6 2003 15:13:37) for ONLINE_EVALUATION_BETA1
Copyright 1988-2003 Comeau Computing. All rights reserved.
MODE:strict errors C++
"ComeauTest.c", line 35: error: "MyClass::MyClass(const MyClass &)",
required for
copy that was eliminated, is inaccessible
f.func( MyClass( ) );
^
Could it be possible that comeau is wrong for one or the other example?
Or did I change something significantly in my simplification?
Could someone try this with a gcc 4.1.x or 3.x.x ?
I appreciate your help and thank you in advance.
Ingo