当constexpr函数调用非constexpr函数时,未实例化模板中的编译器错误

时间:2015-08-14 12:01:06

标签: templates c++11 constexpr

在下面的C ++ 11代码中,函数getconstexpr 但它试图通过非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函数 对象)?

0 个答案:

没有答案