Ich habe mein schreckliches Durcheinander von C++ typsichere psuedo-Aufzählungen zur neuen C++ 0x typsichere Aufzählungen Refactoring, weil sie Weise besser lesbar ist. Wie auch immer, ich benutze sie in exportierten Klassen, so dass ich markieren explizit exportiert werden:g ++ C++ 0x Enum Klasse Compiler-Warnungen
enum class __attribute__((visibility("default"))) MyEnum : unsigned int
{
One = 1,
Two = 2
};
diese Kompilieren mit g ++ liefert die folgende Warnung:
Typ Attribute ignoriert nach Art bereits
definiert ist
Dies scheint sehr seltsam, da, soweit ich weiß, dass Warnung gemeint ist, wie tatsächliche Fehler zu vermeiden:
class __attribute__((visibility("default"))) MyClass { };
class __attribute__((visibility("hidden"))) MyClass;
Natürlich mache ich das natürlich nicht, da ich nur die Sichtbarkeitsattribute bei der Definition des enum class
markiert habe und ich es nirgendwo anders neu definiere oder deklariere (Ich kann diesen Fehler mit einem kopieren einzelne Datei).
Letztendlich kann ich dieses Bit Code tatsächlich kein Problem verursachen, abgesehen von der Tatsache, dass, wenn ich einen Wert ändern und den Consumer neu kompilieren, ohne die gemeinsam genutzte Bibliothek neu zu kompilieren, der Verbraucher das neue übergibt Werte und die gemeinsame Bibliothek hat keine Ahnung, was man mit ihnen machen soll (obwohl ich nicht erwarten würde, dass das überhaupt funktioniert).
Bin ich viel zu pedantisch? Kann das sicher ignoriert werden? Ich vermute das, aber zur gleichen Zeit, verhindert dieser Fehler mich mit Werror
zu kompilieren, was mich unbehaglich macht. Ich würde wirklich gerne dieses Problem verschwinden sehen.
I meldete den Bug dem GCC Bugzilla. –
@TravisGockel: Könnten Sie mich bitte auf dieses Ticket hinweisen? Ich habe unten einen Workaround veröffentlicht. – erenon
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43407 – vpicaver