Виртуальные функции не могут быть constexpr
, однако, когда функция неявно виртуальна через наследование, компиляторы, с которыми я пытался, не жалуются.
Вот пример кода:
class A
{
virtual void doSomething() {}
};
class B : public A
{
constexpr void doSomething() override {} // implicitly virtual constexpr
// but no compilation error
};
class C : public A
{
virtual constexpr void doSomething() override {} // explicitly virtual constexpr
// compilation error
};
Я попробовал его с помощью gcc 7.2.0
и .clang 5.0.0
Являются ли эти компиляторы не соответствующими стандарту в этом отношении или неявно виртуальные constexpr
функции разрешены?