Warum kompiliert sich folgendes in GCC 4.8 ( g++
)? Ist es nicht völlig schlecht gebildet?
test
zu verwenden, das nicht existiert test
zurückzugeben.
Beide sollten grundsätzlich unmöglich sein - nicht nur UB, soweit ich mich erinnern kann - mit einem void
Rückgabetyp.
Die einzige Warnung, die ich bekomme, ist, dass x
ungenutzt ist, nicht einmal irgendetwas über einen nicht standardisierten impliziten Rückgabetyp, der hinzugefügt wird.
Warum GCC dies erlaubt - sicher, weil der Standard es für gültig hält. Ich bin mir ziemlich sicher, dass GCC dies erlaubt, weil es im Falle von Templates nützlich ist.
%Vor% Wie Sie sehen, musste call
keinen speziellen Fall für void
in der return-Anweisung ausführen. Ähnlich wie x.~T()
zulässig ist, auch wenn T
als int
endet.