vedo esempio dal C++ 11 standard (n3337, 14.8.2.3/7)Template tipo di argomento deduzione da operatore di conversione
struct A {
template <class T> operator T***();
};
A a;
const int * const * const * p1 = a; // T is deduced as int, not const int
e cercare di riprodurlo da diversi compilatori. Ho cambiato l'esempio leggermente aggiungendo una dichiarazione di tipo T in una funzione di conversione
struct A {
template <class T> operator T***()
{
T t; //if T==const int, then it is error (uninitialized const)
return nullptr;
}
};
A a;
const int * const * const * p1 = a;
int main(){}
Tutti i compilatori (VS2014, gcc 5.1.0 e 3.5.1 clang) danno un errore nella dichiarazione di "t" , il che significa che T è dedotto come const int. Perché? È qualche estensione?
Congratulazioni, hai trovato un bug del compilatore. (Questa non è un'estensione conforme, ma rifiuta il codice che è ben formato secondo lo standard.) –
@ T.C. Appena [segnalato] (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66108) it. Troppo male bugzilla non ti lascia commettere ninja-edit! – Barry
Sorprendentemente. Ben 3 compilatori hanno lo stesso bug :) P.S. compilatori icc 13.0.1 ok – user3514538