std::ostream
имеет многочисленные operator<<
перегрузки, включая следующие:
std::ostream& operator<<(std::ostream&, const char*);
std::ostream& operator<<(std::ostream&, int);
Ваш класс test
может быть преобразован в const char*
и int
. Компилятор не может выбрать, какое преобразование использовать, потому что оба преобразования будут работать одинаково хорошо. Таким образом, преобразование неоднозначно.