Attualmente sto esaminando un codice che può essere compilato sulle versioni più recenti di GCC ma non su quelle precedenti. Nel mio caso sto utilizzando un valore da std::back_inserter
a std::copy
alcuni dati da una struttura dati a una struttura dati personalizzata. Se dimentico il typedef typedef value_type & const_reference
in questa struttura dati personalizzata, questo non verrà compilato su GCC 4.4. Lo stesso codice compila e gira bene su GCC 4.5.std :: back_inserter richiede const_reference su GCC precedente. Perché?
Qual è la differenza tra queste due versioni del compilatore, che rende il codice compilare su una versione, ma non dall'altra. Immagino che abbia qualcosa a che fare con l'implementazione di C++ 11, che era molto meno completa in GCC 4.4. Probabilmente qualcosa con decltype
o un'altra nuova parola chiave C++ 11, direi.
Anche questo codice è corretto se si utilizza std::back_inserter
senza definire il tipo const_reference
? Di solito pensavo che fosse necessario implementare l'intero set di typedef (value_type
, reference
, const_reference
ecc.) Per essere compatibile con la libreria degli algoritmi STL? O posso tranquillamente supporre che se il mio codice viene compilato in questo caso non sto invocando nulla di pericoloso (ad esempio spostare la semantica, che distruggerebbe l'altra mia struttura dati).
Per la cronaca (per aiutare i principianti come me risparmiare tempo): Dopo che ho aggiunto 'typedef T & riferimento; typedef const T & const_reference; ' nella mia struttura dati, l'errore c2039 per back_inserter è scomparso. –