本地类中的成员模板

给出以下代码:

void f() { class A { template <typename T> void g() {} }; } 

g ++ 4.4(还有g++-4.6 -std=gnu++0x )抱怨:“本地类中成员模板声明无效”。

显然本地类不允许有模板成员。 这个限制的目的是什么? 它会被删除在C ++ 0x?

注意:如果我将本地类本身作为模板,而不是给它一个模板成员:

  void f() { template <typename T> class A { void g() {} }; } 

我得到“错误:模块声明不能出现在块作用域”。

这个限制的目的是什么? 只是一个猜测,但是:

  • 只能在封闭函数中使用模板类/模板成员函数。 因此,你已经知道在函数内所有使用的types,因此可以直接指定使用的types(对于几种types,当然,模板变体会保存一些input)。
  • 虽然看起来不是这样,但它是所有编译器创build者的工作,也是错误的空间,所以它是值得的。

有趣的事实:尝试使用函数内的本地类作为函数中声明的(c ++ 0x)-lambda函数的返回types:MSVC 2010:内部编译器错误^^。

Interesting Posts