我有一個CRTP模板類在這裏:鐺VS GCC CRTP:constexpr變量不能有非文字類
template <typename S>
class Base
{
public:
constexpr static S NOT_SET{0};
};
struct Derived : public Base<Derived>
{
};
鏘(5.0.0)不接受這一點:
5 : <source>:5:24: error: constexpr variable cannot have non-literal type 'const Derived'
constexpr static S NOT_SET{0};
^
8 : <source>:8:25: note: in instantiation of template class 'Base<Derived>' requested here
struct Derived : public Base<Derived>
^
5 : <source>:5:24: note: incomplete type 'const Derived' is not a literal type
constexpr static S NOT_SET{0};
^
8 : <source>:8:8: note: definition of 'Derived' is not complete until the closing '}'
struct Derived : public Base<Derived>
^
1 error generated.
Compiler exited with result code 1
但海灣合作委員會(測試4.9.2和6.2)接受它就好了。
如何在叮噹中這樣做?
謝謝:但是,如果我試圖移植一個現有的代碼庫,它利用了GCC的這個「特性」來叮噹,你的建議是什麼? – Anton
只要派生類型是constexpr可構造的,就可以在基類中定義一個constexpr函數,它返回它的_not set_版本(不管它是什麼意思)。它可以爲你工作嗎? – skypjack
是的,這是個好主意。謝謝。我會接受你的回答,但是你認爲你也可以把你的評論放入答案中,作爲後代嗎? :-) – Anton