Ответ 1
Локальный класс не может быть аргументом шаблона. Поскольку в стандарте говорится: -
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.С++. moderated.
UPDATE: Было какое-то обсуждение вопроса о том, почему нельзя использовать локальные классы в качестве аргументов шаблона? Ссылки здесь и здесь на c.std.С++ обсуждают тоже самое.