std::exception's constructors
I have an exception class to which I added another constructor. These are
the existing and the added ones:
1) Existing:
Exception::Exception(const std::string& err_msg /* other parameters */);
2) Added:
Exception(const std::exception& except /* same other parameters */);
The following 'throw' caused ambiguity
throw Exception("SOME TEXT" /* other parameters */);
and this is a message from the compiler:
.... : error C2668: 'Exception::Exception' : ambiguous call to overloaded
function
...: could be 'Exception::Exception(const std::exception & [OTHER
PARAMETERS])'
...: or 'Exception::Exception(const std::string & [OTHER
PARAMETERS])'
while trying to match the argument list '(const char [...] [OTHER
DETAIL])'
I then browsed to the std::exception's definition in the STL library and
found the following among its constructors:
__CLR_OR_THIS_CALL exception(const char *const&);
So, the picture, as I see it, is as follows: the compiler tries to resolve
the call and finds two matches: one based on the std::string's non-explicit
constructor taking "const char*", and the other, on std::exception's
constructor accepting the same.
Whilst the std::string's behaviour is as expected, I am a little puzzled by
that of std::exception: I have double-checked the std::exception's standard
definition and have also checked on-line help, where I found only this:
----------------------------------
Standard C++ Library Reference
exception Class
class exception {
public:
exception( ) throw( );
exception(const exception& right) throw( );
exception& operator=(const exception& right) throw( );
virtual ~exception( ) throw( );
virtual const char *what( ) const throw( );
};
----------------------------------
How should it be?
Thank you.