この作品に出くわしたとき、私は他の人のコードを読んでいました(MWEに削除されました):
template<typename R> class Test {
public:
typedef R R;
};
ここでは、typedef
それ自体にテンプレート パラメーターの があり、GCC と clang ( の有無にかかわらず-std=c++2a
) が不平を言います:
test.cc:3:19: エラー: 'typedef R Test::R' シャドウ テンプレート パラメータの宣言
ただし、 Compiler Explorerの ICC と MSVC はどちらもその部分を受け入れます。
私はこの質問typedef
を読みましたが、通常、to self はノーオペレーションであることが示唆されています。しかし、ここではそうではないようです。この質問も関連していることがわかりましたが、ここではtypedef
.
ここで質問
です。この種の再定義は標準で許可されていますか? そのステートメントの副作用はありますか?なぜそれを書くことができるのでしょうか?