Рассмотрим следующее:
struct X {
template <class T> operator T(); // #1
template <class T> operator T&(); // #2
};
int a = X{}; // error: ambiguous
int& b = X{}; // calls #2
int const& c = X{}; // calls #2
Ситуация для b
проста, #2
является единственным жизнеспособным кандидатом. Каково правило, указывающее, что #2
предпочтительнее #1
для инициализации int const&
, но два являются неоднозначными для инициализации int
?