相关疑难解决方法(0)

回归虚空?

我不明白为什么这段代码编译没有错误:

#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)

根据标准是否可以,还是编译器容差?

c++ templates return void c++11

26
推荐指数
2
解决办法
1055
查看次数

constexpr void函数被拒绝

我有这个非常简单的功能,无法编译.

constexpr void func()
{
}
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

error: invalid return type 'void' of constexpr function 'constexpr void func()'

     constexpr void func()
Run Code Online (Sandbox Code Playgroud)

在C++ 14中,void是一个文字类型[§3.9/ 10]:

类型是文字类型,如果它是:

  • 无效; 要么
  • 标量类型; 要么
  • 参考类型; 要么
  • 一个文字类型的数组; 要么
  • 具有以下所有属性的类类型(第9节):
    • 它有一个简单的析构函数,
    • 它是聚合类型(8.5.1)或至少有一个constexpr构造函数或构造函数模板,它不是复制或移动构造函数,并且
    • 它的所有非静态数据成员和基类都是非易失性文字类型.

有人能解释为什么这是无效的吗?

c++ return-type language-lawyer constexpr c++14

12
推荐指数
2
解决办法
3312
查看次数

标签 统计

c++ ×2

c++11 ×1

c++14 ×1

constexpr ×1

language-lawyer ×1

return ×1

return-type ×1

templates ×1

void ×1