派生型のstatic constexpr
を含むCRTPを作成しようとしています。これは、1つのクラスでは実現できないためです。このコードはGCCでうまくコンパイルされますが、clangはDerived
が不完全な型であると不平を言っています。どちらが正しいですか?クラス定義を基本クラスに渡すと、クラス定義は完了していますか?
template<class T>
class Base {
public:
static constexpr T a = T(1), b = T(20);
};
class Derived : public Base<Derived> {
public:
int x;
constexpr Derived(int x) : x(x) {}
};
Derivedのコンストラクタでローカル変数xとメンバの名前が同じであることに注意してください – Brahim
基本クラス内で派生オブジェクトを静的に保つことはベストアイデアではないことを指摘したいと思います。 –
唯一の理由この方法は、 'Derived '型の' static constexpr'を 'Derived'に入れることができないためです。私はこれをやりたいと思っていました: 'Derived :: constants :: a'のようなものではなく、' Derived :: a'です。 – user975989