Una class può condividere il nome di un namespace?

È valido il seguente codice C ++?

namespace Foo { class Bar { // Class code here. }; } 

 namespace Foo { namespace Bar { void SomeFunction(); { // Function code here. } } } 

In altre parole, può esserci un namespace con lo stesso nome di una class?

Non puoi avere l’accordo che hai nella tua domanda perché non c’è modo di disambiguare Bar .

Il mio compilatore dice:

 error C2757: 'Bar' : a symbol with this name already exists and therefore this name cannot be used as a namespace name 

“può esserci un namespace con lo stesso nome di una class ?”

No , se si trovano nello stesso spazio dei nomi, come nel tuo caso.

Altrimenti, sì. Qualunque cosa può avere lo stesso nome di qualsiasi altra cosa se si trovano in spazi dei nomi diversi. Vedi questo thread StackOverflow come riferimento.

No, ma puoi avere SomeFunction come membro statico della class Bar .

 namespace Foo { class Bar { // Class code here. static void SomeFunction() { // Function code here. } }; } 

Il risultato non è equivalente al 100% a quello che desideri (a causa di ADL) ma i nomi qualificati sono quelli che ti aspetti.