C++ 使用相同的符号-为什么它';s允许变量/类,但不允许其他变量/类?

C++ 使用相同的符号-为什么它';s允许变量/类,但不允许其他变量/类?,c++,redefinition,C++,Redefinition,允许对变量id和类id使用相同的符号T,如下所示: struct S { int T = 0; struct T{}; }; 在这种情况下,struct T被int T隐藏 但是,对于以下其他情况,它们被视为重新定义,不允许: struct S { int T = 0; template<class> struct T{}; // error! using T = int; // error! }; 结构 { int T=0;

允许对变量id和类id使用相同的符号
T
,如下所示:

struct S
{
    int T = 0;
    struct T{};
};
在这种情况下,
struct T
int T
隐藏

但是,对于以下其他情况,它们被视为重新定义,不允许:

struct S
{
    int T = 0;

    template<class>
    struct T{}; // error!

    using T = int; // error!
};
结构
{
int T=0;
模板
结构T{};//错误!
使用T=int;//错误!
};
在第一个例子中,这种不一致的理由是什么?有什么好的理由允许这种情况发生