Miembro de datos `static constexpr auto` inicializado con enumeración sin nombre
Estaba trabajando en un proyecto C ++ 11 únicamente usandoclang++-3.4
y decidí compilar usandog++-4.8.2
en caso de existir discrepancias en los errores producidos. Resultó que g ++ rechaza algún código que clang ++ acepta. He reducido el problema al MWE que figura a continuación.
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: error: ‘const<anonymous enum> foo<int>::value
", Declarado usando el tipo anónimo, se usa pero nunca se define [-permisivo]
static const auto value = A;
Me gustaría recibir ayuda para responder las siguientes dos preguntas:
¿Qué compilador es correcto en su interpretación del estándar? Supongo que un compilador tiene razón al aceptar o rechazar el código, y el otro está equivocado.
¿Cómo puedo solucionar este problema? No puedo nombrar la enumeración anónima, porque es de una biblioteca de terceros (en mi caso, las enumeraciones eranEigen::RowMajor
yEigen::ColMajor
)