51 lines · cpp
1// RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++142// RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++173// RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++20 -Wc++17-compat4 5namespace inline foo1::foo2::foo3 { // expected-error {{expected identifier or '{'}} expected-error {{use of undeclared identifier 'foo1'}}6}7 8inline namespace foo4::foo5::foo6 { // expected-error {{nested namespace definition cannot be 'inline'}}}9}10 11#if __cplusplus <= 201402L12// expected-warning@+7 {{nested namespace definition is a C++17 extension; define each namespace separately}}13// expected-warning@+6 {{inline nested namespace definition is a C++20 extension}}14#elif __cplusplus <= 201703L15// expected-warning@+4 {{inline nested namespace definition is a C++20 extension}}16#else17// expected-warning@+2 {{inline nested namespace definition is incompatible with C++ standards before C++20}}18#endif19namespace valid1::valid2::inline valid3::inline valid4::valid5 {}20// expected-note@-1 4 {{previous definition is here}}21 22#if __cplusplus <= 201402L23// expected-warning@+3 {{nested namespace definition is a C++17 extension; define each namespace separately}}24#endif25//expected-warning@+1 2 {{inline namespace reopened as a non-inline namespace}}26namespace valid1::valid2::valid3::valid4::valid5 {}27 28#if __cplusplus <= 201402L29// expected-warning@+7 {{nested namespace definition is a C++17 extension; define each namespace separately}}30// expected-warning@+6 {{inline nested namespace definition is a C++20 extension}}31#elif __cplusplus <= 201703L32// expected-warning@+4 {{inline nested namespace definition is a C++20 extension}}33#else34// expected-warning@+2 {{inline nested namespace definition is incompatible with C++ standards before C++20}}35#endif36namespace valid1::valid2::inline valid3::inline valid4::valid5 {}37 38namespace valid1 {39namespace valid2 {40//expected-warning@+1 {{inline namespace reopened as a non-inline namespace}}41namespace valid3 {42//expected-warning@+1 {{inline namespace reopened as a non-inline namespace}}43namespace valid4 {44namespace valid5 {45}46} // namespace valid447} // namespace valid348} // namespace valid249} // namespace valid150 51