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 :
Локальный тип, тип без связи, безымянный тип или тип, составленный из любого из этих типов, не должны использоваться в качестве аргумента шаблона дляпараметр.