Учитывая следующий простой struct
VARIADIC шаблон приоритета конструктор
template <typename T>
struct A
{
A(T a) {}
template <typename ... Ts>
A(T a, Ts ... more) {}
};
int main()
{
A<int> a(1);
}
Что является гарантией того, что A(T a)
будет называться вместо VARIADIC конструктор шаблонов, и почему?
14.8.2.4 о сравнении двух шаблонов функций, чтобы увидеть, который является более специализированными. Но одна из функций-кандидатов в этом примере не является шаблоном функций вообще. – aschepler
@aschepler Вы говорите, что компилятор не должен заходить так далеко, потому что наличие функции без шаблона, которая является идеальным сочетанием, означает, что даже не нужно начинать разрешение шаблона. Согласен. Там будет другой раздел, который охватывает это. –