Как использовать локальные классы с шаблонами?
-
02-10-2019 - |
Вопрос
GCC не одобряет неместные шаблоны с местными классами:
template <typename T>
void f(T);
void g()
{
struct s {};
f(s()); // error: no matching function for call to 'f(g()::s)'
}
VC не жалуется.
Как это должно быть сделано?
Решение
В C ++ 03 не может быть сделано, C ++ 0x будет поднимать это ограничение, хотя.
C ++ 03, §14.3.1/2:
Местный тип, тип без связи, безымянный тип или тип, усугубляемый из любого из этих типов, не должен использоваться в качестве шаблона-аргумента для параметра шаблона типа.
Не связан с StackOverflow