Локальный класс не может быть аргументом шаблона. Потому что стандарт гласит: -
14.3.1 пункт 2:
"Локальный тип, тип без связи, безымянный тип или тип
составные из любого из этих типов не должны использоваться в качестве
Аргумент шаблона для параметра типа шаблона. "
[Example:
template <class T> class X { /* ... */ };
void f()
{
struct S { /* ... */ };
X<S> x3; // error: local type used as templateargument
X<S*> x4; // error: pointer to local type used as templateargument
}
-end example] [Note: a template type argument may be an incomplete
type (3.9). ]"
Предлагается один обходной путь здесь на c.l.c ++. Модерируется.
UPDATE :
Было некоторое обсуждение того, почему нельзя использовать локальные классы в качестве аргументов шаблона? Ссылки здесь и здесь на c.std.c ++ обсуждают то же самое.