Вложенное неявное преобразование в переполнении стека

Я хотел иметь неявное преобразование в два уровня. Следующий фрагмент кода является прототипом проблемы, с которой я сталкиваюсь.

//Sources
class A
{
public:
void print()
{
std::cout <<"Class A"<< std::endl;
}

operator int()
{
return 1;
}
};

class B
{
public:
void print()
{
std::cout <<"Class B"<< std::endl;
}

operator A()
{
return A();
}
};

class C
{
public:
void print()
{
std::cout <<"Class C"<< std::endl;
}
operator B()
{
return B();
}
};void print_(A a)
{
a.print();
}

//driver

int main( int argc, char* argv[] )
{
C c;

//print_( c ); // compilation error
//print_( C() ); // compilation error
print_( c.operator framework::configuration::B() ); //when explicitly invoked it worked
return 0;
}

Я посмотрел пример, приведенный в следующих ссылках, и убедился, что это достижимо.

Как работают операторы преобразования в C ++?

Перегрузка оператора

3

Решение

Стандарт допускает только одно неявное преобразование с участием определенного пользователем типа. У вас есть два, следовательно, ошибка компиляции.

См. 12.3 / 4

Не более одного пользовательского преобразования (конструктор или функция преобразования) неявно применяется к одному
значение.

7

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]