1// Testcase for printing typename/typedef bindings as well as template args 2// in diagnostics (PR c++/25185) 3 4template <class T> 5struct 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 14struct B 15{ 16 typedef void* type; 17}; 18 19// Also make sure that deduced template arguments get canonicalized. 20 21template <class T> 22void f (T &t); // { dg-message "T = int" } 23 24template <class T> 25void f (T &t, int = 0); // { dg-message "" } 26 27typedef int myint; 28myint i; 29myint *p; 30 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