`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).

Ответы на вопрос(3)

Ваш ответ на вопрос