通常、クラスを定義する際、メンバに自分自身を持たせようとすると不完全型なのでエラーになると思います。これは、テンプレートクラスの場合でも同様です。
cpp
1// テンプレートではない場合 2struct X { 3 X x = {}; // X は不完全型なのでエラー 4}; 5 6// テンプレートの場合 7template <typename T> 8struct X { 9 X x = {}; // 不完全型なのでエラー 10};
ここで、メンバに自分自身を持たせようとする際に static inline
をつけたとき、テンプレートの場合にはエラーにならないようです。コンパイルは、gcc と clang 両方で試しました。[追記] このとき、実際にインスタンス化して確認しました。また、MSVC で試したところ、Internal compiler error になるようです。
cpp
1// テンプレートではない場合 2struct X { 3 static inline X x = {}; // 不完全型なのでエラー 4}; 5 6// テンプレートの場合 7template <typename T> 8struct X { 9 static inline X x = {}; // コンパイルが通る 10};
最後の例のコンパイルはなぜ通るのでしょうか...ご回答よろしくお願い致します。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/13 13:54