Ich habe eine seltsame Kompilierungswarnung für den folgenden Code mit Visual C ++ 2010:
%Vor%Die Warnung:
%Vor% Was ich nicht verstehe ist, dass AttributeName
"redefinition" auf derselben Zeile ist wie die Definition ... klingt wie ein Bug
Ich habe festgestellt, dass% o_de% eine Nicht-Template-Klasse entfernt, die Warnung entfernt. Dies ist jedoch keine Option, da der reale Code komplizierter ist als dieser Testfall und als Vorlage verwendet werden muss.
Dieser Code wird auch nicht kompiliert, wenn Warnungen als Fehler behandelt werden ...
Es kompiliert ohne Warnungen auf GCC .
Warum gibt msvc eine solche Warnung aus und gibt es eine Problemumgehung?
Bearbeiten
Die folgende Änderung:
%Vor%scheint die Warnung zu löschen.
Dies ist meist eine Vermutung, da dies zu lösen scheint (?):
%Vor%Meine Vermutung ist, dass die Forward-Deklaration sowohl als Deklaration als auch als "Definition" betrachtet wird, da sie nichts anderes sehen kann. Daher beschwert sie sich darüber, dass der Default "neu definiert" wird, obwohl es dieselbe Zeile ist. Könnte unbeabsichtigt sein, obwohl sich 2012 gleich verhält.
Tags und Links c++ visual-studio templates default-parameters