我想寫一個CRTP來包含派生類型的static constexpr
,因爲這對於一個類是不可能的。此代碼在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 :: a',而不是像'Derived :: constants :: a'這樣的東西。 – user975989