Я работал над проектом С++ 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
).