【发布时间】:2018-10-24 15:15:20
【问题描述】:
我无法理解为什么 gcc-8.2.0 和 clang-7.0.0 都拒绝以下代码(实时代码 here):
#include <array>
int main() {
constexpr std::array<int,3> v{1,2,3};
constexpr auto b = v.begin(); // error: not a constexpr
return 0;
}
有错误
error: '(std::array<int, 3>::const_pointer)(& v.std::array<int,3>::_M_elems)'
is not a constant expression (constexpr auto b = v.begin();)
根据en.cppreference.com,begin() 成员函数声明为constexpr。这是编译器错误吗?
【问题讨论】:
-
使用
.cbegin. -
@АлексейНеудачин 没有区别。
-
@АлексейНеудачин
begin()和cbegin()在 const 对象上做同样的事情。 -
所以尝试
auto b=...,如果失败则尝试const。你也把auto改成std::....::citerator