1 // Testcase for printing typename/typedef bindings as well as template args 2 // in diagnostics (PR c++/25185) 3 4 template <class T> 5 struct A { 6 typename T::type f(); // { dg-message "typename T::type = void*" } 7 void f(int i = 0); // { dg-message "" } 8 9 typedef typename T::type mytype; 10 mytype g(); // { dg-message "mytype = void*" } 11 void g(int i = 0); // { dg-message "" } 12 }; 13 14 struct B 15 { 16 typedef void* type; 17 }; 18 19 // Also make sure that deduced template arguments get canonicalized. 20 21 template <class T> 22 void f (T &t); // { dg-message "T = int" } 23 24 template <class T> 25 void f (T &t, int = 0); // { dg-message "" } 26 27 typedef int myint; 28 myint i; 29 myint *p; 30 main()31int main() 32 { 33 A<B> a; 34 a.f(); // { dg-error "" } 35 a.g(); // { dg-error "" } 36 37 f(i); // { dg-error "" } 38 f(p); // { dg-error "" } 39 } 40