Я не могу понять, почему компилятор выдает ошибки при вызове функции
Как компилятор должен выяснить, какую функцию вызывать?У вас есть две функции в наборе перегрузки, связанные с именем func
, и два оператора, которые позволяют неявные преобразования в типы, которые одинаково хорошо соответствуют обоим параметрам функции этого набора перегрузки.
Ситуация идентична
void f(long);
void f(short);
f(42); // Error: both conversions int -> log and int -> short possible
Вы можете исправить это, например,
fun(static_cast<Test2>(t)); // be explicit on the calling side
или пометив один (или оба) оператора преобразования как explicit
explicit operator Test2 () {return t2;}
, что отключаетнеявное преобразование в Test2
и требует явного приведения, как показано ранее.