В следующем фрагменте кода (live on coliru):
#include <iostream>
#include <string>
int main()
{
struct S {
operator bool () const { return false; }
operator std::string () const { return "false"; }
} s;
std::cout << s << "\n"; // outputs 0
}
Как компилятор решил выбрать неявное преобразование в bool
через std::string
?
Моя гипотеза заключается в том, что в этом случае это может быть чисто порядок объявления различных ароматов std::basic_ostream::operator<<
, но есть все это? Стандарт ли что-то говорит о выборе конкретного неявного преобразования?