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