std :: array :: at не рассматривается как constexpr при использовании g ++ с llvm libcxx - PullRequest
0 голосов
/ 18 октября 2018
typedef std::array<T, 3> C;
constexpr C c = {1, 2, 3.5};
constexpr T t1 = c.at(0);`

Третья строка выдает ошибку при компиляции с g++.Он отлично работает с clang++, когда используется LLVM libc ++.Кажется, что возврат c.at(0) не является constexpr с использованием C ++ 14. Однако std::array::at имеет тот же тип возврата, что и описанный здесь .

Это полное сообщение об ошибке:

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);
...