C++11: неоднозначность между конструктором преобразования и функцией преобразования при инициализации параметра передачи по значению?

#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) , однако в стандарте указано, что:

Определенные пользователем преобразования применяются только там, где они однозначны

Казалось бы, в этом случае есть двусмысленность. Кто-нибудь может объяснить противоречие?

Я ожидал выше, чтобы не компилироваться. Я также почти уверен, что много лет назад Скотт Мейерс написал об этом конкретном примере и сказал, что он не будет компилироваться. Что я пропустил?

6
задан iammilind 12 March 2012 в 02:45
поделиться