我不明白为什么这段代码编译没有错误:
#include <iostream>
template <class T>
struct Test
{
static constexpr T f() {return T();}
};
int main()
{
Test<void> test;
test.f(); // Why not an error?
return 0;
}
Run Code Online (Sandbox Code Playgroud)
根据标准是否可以,还是编译器容差?
我有这个非常简单的功能,无法编译.
constexpr void func()
{
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
error: invalid return type 'Run Code Online (Sandbox Code Playgroud)void' ofconstexprfunction 'constexpr void func()'constexpr void func()
在C++ 14中,void是一个文字类型[§3.9/ 10]:
类型是文字类型,如果它是:
- 无效; 要么
- 标量类型; 要么
- 参考类型; 要么
- 一个文字类型的数组; 要么
- 具有以下所有属性的类类型(第9节):
- 它有一个简单的析构函数,
- 它是聚合类型(8.5.1)或至少有一个
constexpr构造函数或构造函数模板,它不是复制或移动构造函数,并且- 它的所有非静态数据成员和基类都是非易失性文字类型.
有人能解释为什么这是无效的吗?