[英]Implicitly virtual constexpr function
虚函数不能是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
功能?
编译器有一个bug。 请注意,已经在clang 3.5中修复了这个问题,不确定为什么你没有收到错误,因为我这样做了。
该标准在[dcl.constexpr] p3中非常清楚:
constexpr函数的定义应满足以下要求:
- 它不应该是虚拟的;
- [...]
doSomething
是否隐式virtual
无关紧要。 在这两种情况下,它都被认为是virtual
,因此它违反了上述要点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.