#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
Итак, мой вопрос: какой компилятор «правильный» в смысле совместимости с С++ 11? И если clang
правильно, то почему operator[]
std::array не поддерживает constexpr? Разве это не одна из проблем, которую должен был решить std::array
?