Consider the following class:
class foo
{
public:
constexpr operator bool() const noexcept;
constexpr operator void * &() noexcept;
constexpr operator void * const &() const noexcept;
constexpr operator void const * &() noexcept;
constexpr operator void const * const &() const noexcept;
};
A foo
object would be used like this:
void bar(bool);
// ...
foo f;
bar(f); // error C2664: cannot convert argument 1 from 'foo' to 'bool'
// message : Ambiguous user-defined-conversion
// message : see declaration of 'bar'
The issue is that the operator bool
is not considered because of its const
ness. If I make another function without the const
qualifier, the problem is solved. If I make f
const, the problem is solved as well. If I explicitly cast f
to bool, the problem is solved.
What are my other options and what is causing this ambiguity?