Can 'operator T const& () const' do any harm?
I gather that with C++0x we'll be able to write
class T { public: T(){} private: T( T const& ); };
void foo( T const& ) {}
int main() { foo( T() ); }
Currently this code is rejected by Visual C++ 7.1 (with option /Za),
Comeau Online version 4.3.3, and g++ 3.4.4.
However, this code:
class NoCopy
{
public: NoCopy() {}
private: NoCopy( NoCopy const& ); NoCopy& operator=( NoCopy const& );
};
class T: public NoCopy {};
void foo( T const& ) {}
int main() { foo( T() ); }
is accepted by two of the three compilers mentioned above; only g++
produces a compilation error (emits a diagnostic, barfs, whatever).
To make the code compile also with g++ one possibility is to do
class T: public NoCopy
{
public: operator T const& () const { return *this; }
};
This is IMO bad from a design point of view, because it relies on
convention (having this repeated in every class).
But can it do harm, e.g. unintentionally allow something Bad, or
disallow something Good?
--
A: Because it messes up the order in which people normally read text.
Q: Why is it such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]