Come detto nel commento, nel primo caso, in realtà si sta esportando un nome da uno spazio dei nomi a quella che contiene la dichiarazione using
, mentre nel secondo caso si sta definendo un alias nello spazio dei nomi che contiene la dichiarazione using
che punta a quel nome specifico e al suo spazio dei nomi circostante.
A titolo di esempio, con la seconda espressione è possibile definire gli alias come la seguente:
using Foo = Bar<MyClass>;
template <class C>
using Foo = Bar<C, MyClass>;
Mentre il primo using
espressione non può, ma serve solo a far nomi siano disponibili in spazi diversi rispetto a quelli che li contengono
Vedere here per ulteriori dettagli sull'utilizzo delle direttive, utilizzo di dichiarazioni e alias (tipo e modello).
Ebbene, come esempio, la seconda espressione può essere usata per definire alias come 'using Foo = Bar', mentre il primo non può. Ad ogni modo, nel primo esempio si sta esportando un nome esistente, nel secondo si sta creando un nuovo alias. –
skypjack
Il primo è un [using declaration] (http://en.cppreference.com/w/cpp/language/namespace#Using-declarations) mentre il secondo è un [alias namespace] (http: //en.cppreference .com/w/cpp/lingua/namespace_alias). – crayzeewulf
@crayzeewulf come il titolo della domanda menziona i tipi, direi che il secondo è un [tipo alias] (http://en.cppreference.com/w/cpp/language/type_alias) piuttosto che un alias ns. – Christophe