`static constexpr auto` Datenelement mit unbenannter Aufzählung initialisiert
Ich habe an einem C ++ 11-Projekt ausschließlich mit gearbeitetclang++-3.4
, und entschied sich zu kompilieren mitg++-4.8.2
Im Falle von Unstimmigkeiten bei den produzierten Fehlern. Es stellte sich heraus, dass g ++ Code ablehnt, den clang ++ akzeptiert. Ich habe das Problem auf die unten angegebene MWE reduziert.
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: Fehler:const<anonymous enum> foo<int>::value
’Wird als anonymer Typ deklariert, wird aber nie definiert [-fpermissive]
static const auto value = A;
Ich hätte gerne Hilfe bei der Beantwortung der folgenden zwei Fragen:
Welcher Compiler interpretiert den Standard richtig? Ich gehe davon aus, dass ein Compiler den Code akzeptiert oder ablehnt und der andere falsch ist.
Wie kann ich dieses Problem umgehen? Ich kann die anonyme Aufzählung nicht nennen, da sie aus einer Drittanbieter-Bibliothek stammt (in meinem Fall waren es die Aufzählungen)Eigen::RowMajor
undEigen::ColMajor
).