Si consideri il seguente codice:Cast operatore, GCC e clang: quale compilatore ha ragione?
struct S {
using T = int;
operator T() { return 42; }
};
int main() {
S s;
S::T t = s;
// Is the following line correct?
t = s.operator T();
}
Compila con GCC (4.9/5.1/6.1), ma non riesce a compilare con clangore (3.8/3.7).
L'errore restituito è:
error: unknown type name 'T'; did you mean 'S::T'?
quale compilatore è proprio in questo caso e perché?
Nota
Risolvere si tratta di una questione di qualificazione T
:
t = s.operator S::T();
La questione non è su come farlo funzionare.
Vedi http://wg21.link/cwg1111, rettificato leggermente http://wg21.link/cwg1220 –
@Barry Grazie, ero ad aprire un bug per clang ieri, ma non sono stato in grado di trova/capisce la sezione giusta del riferimento. Ancora per imparare _how_ a leggerlo correttamente ... :-( – skypjack
@ T.C. Quindi, stai dicendo che in realtà è un _bug del linguaggio_? :-) – skypjack