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