summaryrefslogtreecommitdiffstats
path: root/clang/test
diff options
context:
space:
mode:
Diffstat (limited to 'clang/test')
-rw-r--r--clang/test/SemaCXX/cxx1y-deduced-return-type.cpp35
1 files changed, 25 insertions, 10 deletions
diff --git a/clang/test/SemaCXX/cxx1y-deduced-return-type.cpp b/clang/test/SemaCXX/cxx1y-deduced-return-type.cpp
index a061cf4ddb7..2592e7cf105 100644
--- a/clang/test/SemaCXX/cxx1y-deduced-return-type.cpp
+++ b/clang/test/SemaCXX/cxx1y-deduced-return-type.cpp
@@ -385,16 +385,31 @@ namespace MemberTemplatesWithDeduction {
}
}
-namespace NNS {
- int n;
- decltype(auto) i();
- decltype(n) j();
- struct X {
- // We resolve a wording bug here: 'decltype(auto)::' should not be parsed
- // as a nested-name-specifier.
- friend decltype(auto) ::NNS::i();
- friend decltype(n) ::NNS::j(); // expected-error {{not a class}}
- };
+// We resolve a wording bug here: 'decltype(auto)' should not be modeled as a
+// decltype-specifier, just as a simple-type-specifier. All the extra places
+// where a decltype-specifier can appear make no sense for 'decltype(auto)'.
+namespace DecltypeAutoShouldNotBeADecltypeSpecifier {
+ namespace NNS {
+ int n;
+ decltype(auto) i();
+ decltype(n) j();
+ struct X {
+ friend decltype(auto) ::DecltypeAutoShouldNotBeADecltypeSpecifier::NNS::i();
+ friend decltype(n) ::DecltypeAutoShouldNotBeADecltypeSpecifier::NNS::j(); // expected-error {{not a class}}
+ };
+ }
+
+ namespace Dtor {
+ struct A {};
+ void f(A a) { a.~decltype(auto)(); } // expected-error {{'decltype(auto)' not allowed here}}
+ }
+
+ namespace BaseClass {
+ struct A : decltype(auto) {}; // expected-error {{'decltype(auto)' not allowed here}}
+ struct B {
+ B() : decltype(auto)() {} // expected-error {{'decltype(auto)' not allowed here}}
+ };
+ }
}
namespace CurrentInstantiation {
OpenPOWER on IntegriCloud