Ich habe eine sehr einfache Parserregel (für AX), wie folgt:
%Vor%Die letzte Zeile kompiliert und funktioniert wie erwartet in VC2010, gibt aber einen seltsamen Fehler in gcc 4.6:
%Vor% Ich frage mich, ob es ein (bekannter) Fehler in gcc ist und ob es sogar möglich ist, mit auto
declaration Conversion-Fehler zu bekommen. Sollte der abgeleitete Typ für auto
nicht immer genau der gleiche Typ sein wie der Initialisierer?
AX überlädt Operator & Amp; so:
%Vor%Ich konnte das Problem nicht auf einen kurzen Testfall reduzieren, leider kompiliert jedes Mal, wenn ich versuche, mit einem einfachen Beispiel zu kommen.
auto
ist nicht immer genau der Typ des Initialisierers, da auto
Referenzen fallen lässt und T
eingibt, wo Sie T&
erwarten würden. Wenn Sie eine Referenz benötigen - spell auto&
.
Bewerten Sie diese Antwort nicht, sie dient nur zu Informationszwecken
Dies war tatsächlich ein Fehler in früheren Versionen von gcc, der in gcc-4.7.0 behoben wurde.
Das Problem ist in den Referenzen.
%Vor% Das erste Template-Argument ist axe::r_and_t<axe::r_char_t<char>&, axe::r_char_t<char>&>
für das erste und axe::r_and_t<axe::r_char_t<char>&, axe::r_char_t<char>&>&
für das zweite. Dies ist ein Template-Argument, das nicht übereinstimmt - wahrscheinlich im Rückgabewert. Am wahrscheinlichsten tritt es auf, weil die SFINAE-Implementierung von Visual Studio bestenfalls zweifelhaft ist und keine zweiphasige Suche richtig implementiert, und es ist möglich, dass die GCC-Version Visual Studio eine andere Überladung auswählt.