| // { dg-do compile { target c++11 } } |
| |
| template <int U> |
| struct TypeA |
| { |
| typedef int type; |
| }; |
| |
| template <int N> |
| struct TypeB |
| { |
| template <int U> typename TypeA<U>::type fn(); |
| }; |
| |
| struct TypeC |
| { |
| TypeB<10> b; |
| // This was being printed as: |
| // template<int N> |
| // decltype (((TypeC*)this)-> |
| // TypeC::b. |
| // template<int U> typename TypeA<U>::type TypeB::fn [with int U = U, int N = 10, typename TypeA<U>::type = TypeA<U>::type]()) |
| // TypeC::fn() |
| // we don't want to see the template header, return type, or parameter bindings |
| // for TypeB::fn. |
| template <int N> auto fn() -> decltype(b.fn<N>()); // { dg-bogus "typename" } |
| }; |
| |
| int main() |
| { |
| TypeC().fn<4>(1); // { dg-error "no match" } |
| } |