Membro de dados `static constexpr auto` inicializado com enum sem nome
Eu estava trabalhando em um projeto C ++ 11 usando apenasclang++-3.4
e decidiu compilar usandog++-4.8.2
caso houvesse discrepâncias nos erros produzidos. Acontece que o g ++ rejeita algum código que o clang ++ aceite. Eu reduzi o problema ao MWE dado abaixo.
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: erro: ‘const<anonymous enum> foo<int>::value
', Declarado usando o tipo anônimo, é usado, mas nunca definido [-permissive]
static const auto value = A;
Gostaria de ajuda para responder às duas perguntas a seguir:
Qual compilador está correto em sua interpretação do padrão? Estou assumindo que um compilador está certo ao aceitar ou rejeitar o código, e o outro está errado.
Como posso solucionar esse problema? Não posso nomear a enumeração anônima, porque é de uma biblioteca de terceiros (no meu caso, as enumerações eramEigen::RowMajor
eEigen::ColMajor
)