`static constexpr auto` data-member инициализирован безымянным перечислением
Я работал над проектом C ++ 11 исключительно с использованиемclang++-3.4
и решил скомпилировать используяg++-4.8.2
в случае каких-либо расхождений в произведенных ошибках. Оказалось, что g ++ отклоняет некоторый код, который принимает clang ++. Я свел проблему к MWE, указанному ниже.
enum { a };
template <class T>
struct foo
{
static constexpr auto value = a;
};
int main()
{
static constexpr auto r = foo<int>::value;
}
foo.cpp: 5: 23: ошибка: ‘const<anonymous enum> foo<int>::value
’, Объявленный с использованием анонимного типа, используется, но никогда не определяется [-fpermissive]
static const auto value = A;
Я хотел бы помочь с ответом на следующие два вопроса:
Какой компилятор верен в своей интерпретации стандарта? Я предполагаю, что один компилятор прав в принятии или отклонении кода, а другой неверен.
Как я могу обойти эту проблему? Я не могу назвать анонимное перечисление, потому что оно из сторонней библиотеки (в моем случае перечисления былиEigen::RowMajor
а такжеEigen::ColMajor
).