将g ++与llvm libcxx一起使用时,std :: array :: at不视为constexpr

时间:2018-10-18 07:28:57

标签: c++ g++ c++14 clang++

typedef std::array<T, 3> C;
constexpr C c = {1, 2, 3.5};
constexpr T t1 = c.at(0);`

第三行使用g++编译时给我一个错误。使用LLVM libc ++时,它可以与clang++配合使用。看来c.at(0)的返回不是使用C ++ 14的constexpr。但是,std::array::at的返回类型与here相同。

这是完整的错误消息:

constexpr const value_type& std::__1::array<_Tp, 
_Size>::at(std::__1::array<_Tp, _Size>::size_type) const [with _Tp = 
double; long unsigned int _Size = 3ul; std::__1::array<_Tp, 
_Size>::const_reference = const double&; std::__1::array<_Tp, 
_Size>::value_type = double; std::__1::array<_Tp, _Size>::size_type = long 
unsigned int]’

以常量表达式调用

constexpr T t1 = c.at(0);

0 个答案:

没有答案