// RUN: %clang_cc1 -fsyntax-only -verify %s template struct test { template using fun_diff = char; // expected-note 2{{class template declared here}} }; template decltype(T::template fun_diff) foo1() {} // expected-note@-1 {{candidate template ignored: substitution failure [with T = test, V = int]: 'test::fun_diff' is expected to be a non-type template, but instantiated to a type alias template}} template void foo2() { // expected-error@+1 {{test::fun_diff' is expected to be a non-type template, but instantiated to a type alias template}} int a = test::template fun_diff; } template struct has_fun_diff { using type = double; }; template struct has_fun_diff { // expected-error@+1 {{'test::fun_diff' is expected to be a non-type template, but instantiated to a type alias template}} using type = decltype(T::template fun_diff); }; void bar() { foo1, int>(); // expected-error {{no matching function for call to 'foo1'}} foo2(); // expected-note {{in instantiation of function template specialization}} has_fun_diff, int>::type a; // expected-note {{in instantiation of template class}} }