p1-0x.cpp revision 76178ed0911797175b13ac733c390233f02bb841
1df512bfbc4b8c00202ea7a8c900c59ec55890676David Blaikie// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s
2df512bfbc4b8c00202ea7a8c900c59ec55890676David Blaikie
3df512bfbc4b8c00202ea7a8c900c59ec55890676David Blaikie// The nested-name-specifier of a qualified declarator-id shall not begin with a decltype-specifier.
4df512bfbc4b8c00202ea7a8c900c59ec55890676David Blaikieclass foo {
5df512bfbc4b8c00202ea7a8c900c59ec55890676David Blaikie  static int i;
6df512bfbc4b8c00202ea7a8c900c59ec55890676David Blaikie  void func();
7df512bfbc4b8c00202ea7a8c900c59ec55890676David Blaikie};
8df512bfbc4b8c00202ea7a8c900c59ec55890676David Blaikie
9df512bfbc4b8c00202ea7a8c900c59ec55890676David Blaikieint decltype(foo())::i; // expected-error{{'decltype' cannot be used to name a declaration}}
10df512bfbc4b8c00202ea7a8c900c59ec55890676David Blaikievoid decltype(foo())::func() { // expected-error{{'decltype' cannot be used to name a declaration}}
11df512bfbc4b8c00202ea7a8c900c59ec55890676David Blaikie}
12df512bfbc4b8c00202ea7a8c900c59ec55890676David Blaikie
13df512bfbc4b8c00202ea7a8c900c59ec55890676David Blaikie
14df512bfbc4b8c00202ea7a8c900c59ec55890676David Blaikietemplate<typename T>
15df512bfbc4b8c00202ea7a8c900c59ec55890676David Blaikieclass tfoo {
16df512bfbc4b8c00202ea7a8c900c59ec55890676David Blaikie  static int i;
17df512bfbc4b8c00202ea7a8c900c59ec55890676David Blaikie  void func();
18df512bfbc4b8c00202ea7a8c900c59ec55890676David Blaikie};
19df512bfbc4b8c00202ea7a8c900c59ec55890676David Blaikie
20df512bfbc4b8c00202ea7a8c900c59ec55890676David Blaikietemplate<typename T>
2176178ed0911797175b13ac733c390233f02bb841David Blaikieint decltype(tfoo<T>())::i; // expected-error{{nested name specifier 'decltype(tfoo<T>())::' for declaration does not refer into a class, class template or class template partial specialization}}
22df512bfbc4b8c00202ea7a8c900c59ec55890676David Blaikietemplate<typename T>
2376178ed0911797175b13ac733c390233f02bb841David Blaikievoid decltype(tfoo<T>())::func() { // expected-error{{nested name specifier 'decltype(tfoo<T>())::' for declaration does not refer into a class, class template or class template partial specialization}}
24df512bfbc4b8c00202ea7a8c900c59ec55890676David Blaikie}
25