#include <iostream>
using namespace std;
struct Y;
struct X
{
X(const Y&) { cout << "converting constructor" << endl; }
};
struct Y
{
operator X() { cout << "conversion function" << endl; }
};
void f(X x) {}
int main()
{
Y y;
f(y);
}
В приведенном выше описании функции преобразования приоритет отдается конструктору преобразования моим компилятором (gcc 4.6.1), однако в стандарте говорится, что:
Определяемые пользователем преобразования применяются только там, где они однозначны
Казалось бы, в этом случае существует неоднозначность.Может кто-нибудь объяснить противоречие?
Я бы ожидал, что выше не скомпилировать.Я также вполне уверен, что несколько лет назад Скотт Мейерс написал об этом конкретном примере и сказал, что он не будет компилироваться.Чего мне не хватает?