在C++模板类中,我可以使用相同的名称键入模板参数吗?

jin*_*575 11 c++ templates typedef

如果我有一个模板类:

template<typename Layout>
class LayoutHandler : Handler {
};
Run Code Online (Sandbox Code Playgroud)

我想将参数Layout公开给该类的用户.然后:

template<typename Layout>
class LayoutHandler : Handler {
public:
    typedef Layout Layout; // using the same name
};
Run Code Online (Sandbox Code Playgroud)

VS2012可以编译此代码,并给出预期的结果.(我使用std :: is_same来检查它.)在标准C++ 03或C++ 11中是否允许这样做?

pro*_*ake 6

C++11 中不允许这样做。

Atypedef是一个声明。(参见第 7.1.3 节)

参数template不能在其作用域(包括嵌套作用域)内重新声明。(参见第 14.6.1.6 节)

C++11 标准草案 n3242