// Testcase for printing typename/typedef bindings as well as template args // in diagnostics (PR c++/25185) template struct A { typename T::type f(); // { dg-message "typename T::type = void*" } void f(int i = 0); // { dg-message "" } typedef typename T::type mytype; mytype g(); // { dg-message "mytype = void*" } void g(int i = 0); // { dg-message "" } }; struct B { typedef void* type; }; // Also make sure that deduced template arguments get canonicalized. template void f (T &t); // { dg-message "T = int" } template void f (T &t, int = 0); // { dg-message "" } typedef int myint; myint i; myint *p; int main() { A a; a.f(); // { dg-error "" } a.g(); // { dg-error "" } f(i); // { dg-error "" } f(p); // { dg-error "" } }