Tecnicamente, lo Standard dice che si entra nel regno del comportamento indefinito se si fa questo:
17.6.4.2.1 namespace std [namespace.std]
1 Il comportamento di un programma C++ non è definito se aggiunge dichiarazioni o definizioni allo spazio dei nomi std o ad uno spazio dei nomi all'interno dello spazio dei nomi std se non diversamente specificato.
Ma in pratica, è probabile che tu possa farla franca. Diamine, anche Scott Meyers ha proposto un trucco alias allo stesso modo indefinito nello spazio dei nomi in Effective C++ 3rd Ed. (Articolo 54, p. 268) per utilizzare la funzionalità Boost come soluzione di arresto per la mancanza della funzionalità tr1
.
namespace std { using namespace tr1 = ::boost; }
vostro usando dichiarazione è anche un comportamento indefinito, ma andare avanti e saltare a destra
NOTA:. Commentare con un grande avvertimento grasso, #define
e #pragma
intorno alla vostra versione del compilatore e gli avvisi, e non appena man mano che si esegue l'aggiornamento a un compilatore/libreria che ha effettivamente std::shared_ptr
, assicurarsi di rivisitare quell'intestazione e rimuovere il codice.
[Le versioni successive dovrebbero supportare anche 'std :: tr1'] (http://stackoverflow.com/a/2002972/241631). I compilatori non abbandoneranno l'intero spazio dei nomi; copieranno le cose da quello a 'std' proprio come si sta tentando di fare. Quindi riferirsi al tipo di 'std :: tr1 :: shared_ptr' non dovrebbe essere problematico per molto tempo. – Praetorian
@cassini Che cosa ha detto il pretoriano^Se volevi seguire la tua strada, dovresti eseguire controlli del compilatore nel preprocessore per assicurarti di non avere conflitti su C++ 11 che supporta, e futuri, compilatori, che è disordinato e non così flessibile e non come portatile. – leetNightshade
@leetNightshade In realtà è tutto quanto sopra. Certo, sfortunatamente non esiste un controllo del "compilatore supporta X", ma per la maggior parte degli scopi un semplice controllo del preprocessore per la versione C++ dovrebbe essere sufficiente, in futuro. –