Wenn ich eine Klasse kompiliere, die Boost-Serialisierung verwendet, bekomme ich den Kompilierfehler C2996, siehe unten für die Nachricht selbst. Wenn ich diesen Fehler suche, scheint es, dass dieser Fehler nur von viel älteren Versionen des Compilers ausgelöst wurde. Wie kann das sein?
Die Fehlermeldung:
E: \ Lib \ boost_1_54_0 \ boost / serialisierung / split_member.hpp (42): Fehler C2996: 'boost :: hash_combine': rekursive Funktionsschablonendefinition
VS2013, VS2012 und auch VS2012 Update 4 zeigten dieses Verhalten.
Ich hatte ein ähnliches Problem. Dies scheint mir ein Fehler in VS2012 (und darüber). Ich konnte dies in einer einfachen CPP-Datei reproduzieren, also öffnete ich ein Verbindungsticket .
Ich glaube, dass dieser Fehler fälschlicherweise gemeldet wird, wenn alle folgenden Bedingungen zutreffen:
Der Fehler wird nicht mehr gemeldet, wenn das Objekt geändert wird, um "flacher" zu sein, oder wenn der Aufruf der Vorlagenfunktion entfernt wird.
Dieser Fehler reproduziert auch nicht in VS2010. Ich habe Boost Versionen 1.49, 1.52, 1.55 getestet.
Mögliche Problemumgehung: In einem Fall trat der Fehler nur auf, wenn wir boost::serialization::object_serializable
(statt der Standard object_class_info
) verwendet haben. Ein Wechsel zurück zu object_class_info
kann daher eine Umgehungslösung sein, außer dass die Abwärtskompatibilität mit zuvor serialisierten Daten aufgehoben wird.
Mögliche Problemumgehung # 2: Blenden Sie den Vorlagenfunktionsaufruf in einer separaten Übersetzungseinheit aus.
Der folgende Code gibt den Fehler wieder:
%Vor%Tags und Links c++ visual-studio visual-studio-2012 boost compiler-errors