Given the following code:
void f()
{
class A
{
template <typename T>
void g() {}
};
}
g++ 4.4 (and also g++-4.6 -std=gnu++0x
) complains: "invalid declaration of member template in local class".
Apparently local classes are not allowed to have template members. What is the purpose of this limitation? Will it be removed in C++0x?
Note: If I make the local class itself a template, rather than giving it a template member:
void f()
{
template <typename T>
class A
{
void g() {}
};
}
I get "error: a template declaration cannot appear at block scope".
The purpose of this limitation? Just a guess, but:
Fun Fact: Try to use a local class within a function as a return type for a (c++0x)-lambda function declared in the function: MSVC 2010: internal compiler error ^^.