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