隐式虚拟 constexpr 函数
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
函数?
编译器有一个错误。请注意,这已经在 clang 3.5 中修复,不知道为什么你没有收到错误,因为我有。
该标准在 [dcl.constexpr]p3 中对此非常明确:
constexpr 函数的定义应满足以下要求:
- 它不应是虚拟的;
- [...]
doSomething
是否隐式virtual
并不重要。在这两种情况下,它都被认为是virtual
,因此违反了上述观点。
相关文章:
- 条件constexpr函数
- constexpr 函数中的非文字(通过 std::is_constant_evaluated)
- constexpr构造函数需要常量成员函数时出现问题
- constexpr 函数获取常量字符*
- 如何在 constexpr 函数中实现回退运行时
- 为什么我不能在 constexpr lambda 函数中使用 std::tuple
- 在非 constexpr 函数中作为左值传递的变量上使用 'constexpr' 函数
- 在 constexpr 构造函数 (c++17) 中赋值到 const char * 在使用 Android NDK 时
- NVCC 错误:string_view.h:constexpr 函数返回是非常量
- constexpr函数中的静态constexpr变量
- 在 constexpr funnction 中调用basic_string函数
- 为什么我的 constexpr 对象在我的函数中不是 constexpr?
- constexpr log10 整数函数
- C++:初始化 constexpr 构造函数中的成员数组
- 编译器生成的默认构造函数具有 constexpr 混淆行为
- 在 constexpr 构造函数中初始化数组是否合法?
- 在 constexpr 函数中断言
- MSVC 和函数参数的 constexpr?
- 具有位域的结构的 Constexpr 构造函数
- C++ 默认构造函数 constexpr 或正确未定义