在下面的C ++ 11代码中,函数get
为constexpr
但它试图通过非constexpr
构造函数构造一个实例。
template <typename T>
struct S
{
S() {}
static constexpr S get() { return S(); }
};
int main()
{
// S<int> s1;
// auto s2 = s1.get();
}
虽然这段代码用GCC编译,但是我们使用的编译器失败了 使用消息
constexpr函数返回非常量。
我们开始讨论是否允许编译器发出错误
这个案例。我认为编译器必须接受代码。否则我会这样做
不知道std::time_point
如何在C ++ 11中工作,因为它的构造函数是
仅在C ++ 14之后constexpr
。
这是一个实施质量的事情还是标准所说的
有关未实例化模板的事情w.r.t constexpr
?
此外,如果评论中的代码是,它会改变什么
已激活(即在非constexpr
上调用constexpr
函数
对象)?