xref: /llvm-project/clang/test/CXX/dcl.dcl/basic.namespace/namespace.def/p7.cpp (revision bed75faf7d768f8375681db6a3fb7c3c35eeb5aa)
1 // RUN: %clang_cc1 -fsyntax-only -verify -std=c++20 %s
2 
3 // FIXME: We should probably suppress the warning on reopening an inline
4 // namespace without the inline keyword if it's not the first opening of the
5 // namespace in the file, because there's no risk of the inlineness differing
6 // across TUs in that case.
7 
8 namespace NIL {} // expected-note {{previous definition}}
9 inline namespace NIL {} // expected-error {{cannot be reopened as inline}}
10 inline namespace IL {} // expected-note {{previous definition}}
11 namespace IL {} // expected-warning{{inline namespace reopened as a non-inline namespace}}
12 
13 namespace {} // expected-note {{previous definition}}
14 inline namespace {} // expected-error {{cannot be reopened as inline}}
15 namespace X {
16   inline namespace {} // expected-note {{previous definition}}
17   namespace {} // expected-warning {{inline namespace reopened as a non-inline namespace}}
18 }
19 
20 namespace std {}
21 inline namespace std {} // expected-error{{cannot declare the namespace 'std' to be inline}}
22 inline namespace std::foo {} // expected-error{{cannot declare the namespace 'std' to be inline}}
23                              // expected-error@-1{{nested namespace definition cannot be 'inline'}}
24 namespace foo::inline std {} // expected-note {{previous definition}}
25 namespace foo { inline namespace std {} } // OK
26 namespace foo { namespace std {} } // expected-warning {{inline namespace reopened as a non-inline namespace}}
27