【发布时间】:2014-11-04 17:12:51
【问题描述】:
#include <iostream>
#include <array>
int main(int argc, char **argv) {
constexpr const std::array<int, 2> arr {{ 0, 1 }};
constexpr const int arr2[] = { 0, 1};
static_assert(arr[0] == arr2[0], "asdf");
static_assert(arr[1] == arr2[1], "asdfasdf");
return 0;
}
当使用gcc 4.8.2 和4.9.1 使用g++ test.cpp --std=c++11 编译时,编译成功。
然而,当使用clang 3.4 和3.5 使用clang++ test.cpp --std=c++11 编译时,编译失败:
test.cpp:8:16: error: static_assert expression is not an integral constant expression
static_assert(arr[0] == arr2[0], "asdf");
^~~~~~~~~~~~~~~~~
test.cpp:8:16: note: non-constexpr function 'operator[]' cannot be used in a constant expression
所以我的问题是,在符合 C++11 的意义上,哪个编译器是“正确的”?而且,如果clang 是正确的,那么为什么std::array 的operator[] 不能使用constexpr?这难道不是std::array 应该帮助解决的问题之一吗?
【问题讨论】:
标签: c++ c++11 constexpr static-assert stdarray