相关疑难解决方法(0)

为什么GCC认为constexpr静态数据成员的定义必须标记为constexpr?

[C++14: 7.1.5/1]:constexpr说明符将只应用于一个变量或变量模板,功能或功能模板的声明,或文字类型(3.9)的静态数据成员的声明中的定义.如果函数,函数模板或变量模板的任何声明都有一个constexpr说明符,那么它的所有声明都应该包含说明constexpr符.[..]

请注意,第二句没有像第一句话那样提及"静态数据成员",因此本段中没有要求数据成员的所有声明(此处我正在考虑具体的定义声明)constexpr static具有constexpr符.

我也无法在其他地方找到规则.

那么,为什么海湾合作委员会会拒绝以下计划呢?

#include <chrono>

using namespace std::chrono_literals;

#define DUR 1000ms

struct T
{
   static constexpr auto dur_1 = DUR;
};

decltype(T::dur_1) T::dur_1;

// main.cpp:12:23: error: 'constexpr' needed for in-class initialization of static data member 'const std::chrono::duration<long int, std::ratio<1l, 1000l> T::dur_1' of non-integral type [-fpermissive] 
// decltype(T::dur_1) T::dur_1;
//                       ^
Run Code Online (Sandbox Code Playgroud)

c++ gcc constexpr c++14

24
推荐指数
1
解决办法
1378
查看次数

标签 统计

c++ ×1

c++14 ×1

constexpr ×1

gcc ×1