VS2015 Ошибка шаблонов шаблонов Variadic?
template<typename T0, typename T1, typename ...ArgN>
bool is_any_test(T0 arg0, T1 arg1, ArgN... argn...)
{
return arg0 == arg1 || is_any_test<T0, ArgN...>(arg0, argn...);
};
template<typename T0, typename T1>
bool is_any_test(T0 arg0, T1 arg1)
{
return arg0 == arg1;
};
int wmain(int /*argc*/, const wchar_t* /*argv[]*/)
{
is_any_test(3,4);
return 0;
};
(можно запустить прямо здесь http://webcompiler.cloudapp.net/)
На VS2015 это приводит к
C2668 ambiguous call to overloaded function
На VS2013 это работало нормально. Является ли это ошибкой или я что-то упускаю? Есть ли какой-нибудь рабочий? (Изменение всех occurancies на равнинных МФС - это не вариант)
Должно быть «ArgN ... argn», а не 'ArgN ... argn ...' в определении функции. 'argn ...' в основном говорит пакет параметров для расширения, что не то, что вы хотите. – DeiDei
@DeiDei 'ArgN ... argn ...' фактически анализируется как пакет параметров, за которым следует вариационный аргумент c-style –
Вы правы! Большое спасибо. –