4

この作品に出くわしたとき、私は他の人のコードを読んでいました(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.

ここで質問
です。この種の再定義は標準で許可されていますか? そのステートメントの副作用はありますか?なぜそれを書くことができるのでしょうか?

4

1 に答える 1