当我遇到这篇文章时,我正在阅读别人的代码(剥离到 MWE):
template<typename R> class Test {
public:
typedef R R;
};
这里有一个typedef模板参数,它让 GCC 和 clang(有或没有-std=c++2a)抱怨:
test.cc:3:19: 错误: 'typedef R Test::R' 的声明阴影模板参数
但是,编译器资源管理器上的 ICC 和 MSVC都接受该部分。
我读过这个问题,建议 a typedefto self 通常是无操作的。但是,这里似乎并非如此。我也发现这个问题是相关的,但我认为它们应该不同,因为我们在这里使用的是typedef.
那么问题来了:
标准允许这种重新定义吗?该声明有任何副作用吗?为什么有人会这样写?