конца понял одну штуку.
template< typename T>
void foo(T a)
{
std::cout << "Test1" << std::endl;
}
template< typename T1, typename... T2>
void foo(T1 a, T2... b)
{
std::cout << "Test2" << std::endl;
}
...
foo(1);
По идеи тут компилятор должен сообщить об неопределенности, так как подходят оба шаблона. Давно он так и делал (что приводило к проблемам), то теперь он в данной ситуации будет предпочитать шаблон без пакета параметров и будет вызван первый шаблон. Но вот почему тогда к ошибке приводит следующий код:
template< typename T>
void foo()
{
std::cout << "Test1" << std::endl;
}
template< typename T1, typename... T2>
void foo()
{
std::cout << "Test2" << std::endl;
}
...
foo<int>();
Не должен ли компилятор так же предпочесть первый шаблон? Или я немного не так все понял)
эм...
я исправил))
Обсуждают сегодня