Являются ли параметры шаблона функции T& и T&& неоднозначными?

Рассмотрим эти две перегрузки:

template <typename T> void foo(T &) {}
template <typename T> void foo(T &&) {}

Они потенциально неоднозначны?

Следующий код компилируется с Clang 3.4, но не работает с GCC 4.8, который сообщает о перегрузках (первый с T = intвторой с T = int&) неоднозначны.

int main()
{
    int n = 10;
    foo(n);
}

Я понимаю, что "привязка к ссылке" является "точным соответствием" с точки зрения разрешения перегрузки, поэтому я полагаю, что вопрос сводится к тому, является ли одно из выводов T = int/T = int& предпочтительнее других, или если они одинаково хороши.

0 ответов

Другие вопросы по тегам