Rozważmy następujący program:Funkcja operatora cast kompiluje dobrze w g ++, ale nie w innych kompilatorach. Czemu?
struct S {
using T = float;
operator T() { return 9.9f; }
};
int main() {
S m;
S::T t = m;
t = m.operator T(); // Is this correct ?
}
Program kompiluje grzywny w g ++ (Zobacz na żywo demo here)
Ale to nie w kompilacji w brzękiem ++ MSVC++ & Intel C++ kompilator
dzyń ++ daje następujące błędy (Zobacz demo na żywo here)
main.cpp:8:20: error: unknown type name 'T'; did you mean 'S::T'?
t = m.operator T(); // Is this correct ?
^
S::T
main.cpp:2:11: note: 'S::T' declared here
using T = float;
MSVC++ daje następujące błędy (Zobacz na żywo demo here)
source_file.cpp(8): error C2833: 'operator T' is not a recognized operator or type
source_file.cpp(8): error C2059: syntax error: 'newline'
Intel kompilator C++ odrzuca również ten kod (zob żywo demo here)
Więc pytanie brzmi, który kompilator jest tutaj? Czy tutaj g ++ jest niepoprawny, czy też 3 inne kompilatory są niepoprawne? Co mówi o tym standard C++?
Wow, bardzo ładne pytanie! – Columbo