diff options
| author | Erich Keane <erich.keane@intel.com> | 2018-11-12 17:19:48 +0000 |
|---|---|---|
| committer | Erich Keane <erich.keane@intel.com> | 2018-11-12 17:19:48 +0000 |
| commit | 53f391dcb3232525513b9ee98469587895311c5a (patch) | |
| tree | a47bbd964c3ff4ed70517ceea3a8e2e700cea493 /clang/test | |
| parent | 9e1a0a749b406de3307d6c3bc6ea5810e120c530 (diff) | |
| download | bcm5719-llvm-53f391dcb3232525513b9ee98469587895311c5a.tar.gz bcm5719-llvm-53f391dcb3232525513b9ee98469587895311c5a.zip | |
Implement P1094R2 (nested inline namespaces)
As approved for the Working Paper in San Diego, support annotating
inline namespaces with 'inline'.
Change-Id: I51a654e11ffb475bf27cccb2458768151619e384
llvm-svn: 346677
Diffstat (limited to 'clang/test')
| -rw-r--r-- | clang/test/Parser/cxx2a-inline-nested-namespace-definition.cpp | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/clang/test/Parser/cxx2a-inline-nested-namespace-definition.cpp b/clang/test/Parser/cxx2a-inline-nested-namespace-definition.cpp new file mode 100644 index 00000000000..8e603d24c01 --- /dev/null +++ b/clang/test/Parser/cxx2a-inline-nested-namespace-definition.cpp @@ -0,0 +1,51 @@ +// RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++14 +// RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++17 +// RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++2a -Wc++17-compat + +namespace inline foo1::foo2::foo3 { // expected-error {{expected identifier or '{'}} expected-error {{use of undeclared identifier 'foo1'}} +} + +inline namespace foo4::foo5::foo6 { // expected-error {{nested namespace definition cannot be 'inline'}}} +} + +#if __cplusplus <= 201402L +// expected-warning@+7 {{nested namespace definition is a C++17 extension; define each namespace separately}} +// expected-warning@+6 {{inline nested namespace definition is a C++2a extension}} +#elif __cplusplus <= 201703L +// expected-warning@+4 {{inline nested namespace definition is a C++2a extension}} +#else +// expected-warning@+2 {{inline nested namespace definition is incompatible with C++ standards before C++2a}} +#endif +namespace valid1::valid2::inline valid3::inline valid4::valid5{} +// expected-note@-1 2 {{previous definition is here}} + +#if __cplusplus <= 201402L +// expected-warning@+3 {{nested namespace definition is a C++17 extension; define each namespace separately}} +#endif +//expected-warning@+1 2 {{inline namespace reopened as a non-inline namespace}} +namespace valid1::valid2::valid3::valid4::valid5{} + +#if __cplusplus <= 201402L +// expected-warning@+7 {{nested namespace definition is a C++17 extension; define each namespace separately}} +// expected-warning@+6 {{inline nested namespace definition is a C++2a extension}} +#elif __cplusplus <= 201703L +// expected-warning@+4 {{inline nested namespace definition is a C++2a extension}} +#else +// expected-warning@+2 {{inline nested namespace definition is incompatible with C++ standards before C++2a}} +#endif +namespace valid1::valid2::inline valid3::inline valid4::valid5{} +// expected-note@-1 2 {{previous definition is here}} + +namespace valid1 { + namespace valid2 { +//expected-warning@+1 {{inline namespace reopened as a non-inline namespace}} + namespace valid3 { +//expected-warning@+1 {{inline namespace reopened as a non-inline namespace}} + namespace valid4 { + namespace valid5 { + } + } + } + } +} + |

