В Y::test1()
не-const X::operator void*()
имеет преимущество перед кажущимся лучшим совпадением, X::operator bool() const
- Почему? И где это явление описано в стандарте?
#include <iostream>
struct X {
operator void*() { std::cout << " operator void*()\n"; return nullptr; }
operator bool() const { std::cout << " operator bool()\n"; return true; }
};
struct Y {
X x;
bool test1() { std::cout << "test1()\n"; return x; }
bool test2() const { std::cout << "test2()\n"; return x; }
};
int main() {
Y y;
y.test1();
y.test2();
}
Вывод:
test1()
operator void*()
test2()
operator bool()