Согласно рабочему проекту N3337 (наиболее похожему на опубликованный стандарт ISOC++11) ответ не более одного.
N3337:
К одному значению неявно применяется не более одного определяемого пользователем преобразования (конструктор или функция преобразования).
[ Example: struct X { operator int(); }; struct Y { operator X(); }; Y a; int b = a; // error // a.operator X().operator int() not tried int c = X(a); // OK: a.operator X().operator int() —end example ]
Но судя по результату компиляции main.cpp с помощью gcc (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4 и запуска a.out с цитируемыми утверждениями в Ubuntu 14.04.3 LTS ответ не более одного.
main.cpp:
#include <iostream>
struct As
{
operator int(){ std::cout<<"operator As::int()"<<std::endl; return 1; }
};
struct Bs
{
operator int(){ std::cout<<"operator Bs::int()"<<std::endl; return As(); }
};
int main()
{
int i=Bs();
return 0;
}
компиляция и запуск из терминала:
$ g++ -std=c++11 main.cpp
$ ./a.out
результат (вывод):
operator Bs::int()
operator As::int()
Я что-то неправильно понял, или N3337 неправильный, или gcc содержит ошибку?