Ho sentito un po 'di problema riferimento-riferimento e risoluzione this. Non sono molto bravo con la terminologia del Comitato C++, ma capisco che l'annotazione "Spostati in DR" nel link significa che questa è l'interpretazione corrente che i compilatori conformi agli standard dovrebbero rispettare.C++ - istanza modello con tipo di riferimento
Ho questo codice di esempio che non riesco a capire:
template <typename T>
struct C {
void f(T&) { }
void f(const T&) { }
};
int main() {
C<int> x; // OK
C<int&> y; // compile error: f cannot be overloaded
C<const int&> z; // compile error: f cannot be overloaded
}
ho capito l'errore nel caso C<const int&>
: usando le regole di DR # 106 otteniamo due metodi con la stessa firma f (const int &). Quello che non ottengo è il caso C<int&>
: non dovrebbe generare esattamente lo stesso codice di C<int>
(almeno secondo la risoluzione di Stroustrup)?
Che compilatore stai usando? –
vs2010 genera lo stesso errore (mentre vs2008 segnala un errore illegale ref-to-ref) –
questo ha qualcosa a che fare con il fatto che il cast dinamico/statico non è permesso con riferimenti a tipi."'doubl & d = dynamic_cast (someintvariable)'" porta a 'static_cast': non può convertire da 'int' a 'double &' in MSVC –