1ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao// RUN: %clang_cc1 -fsyntax-only -verify %s
2ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
3ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotemplate<typename T> struct A { };
4ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
5ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotemplate<typename T, typename U = A<T*> >
6ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  struct B : U { };
7ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
8ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotemplate<>
9ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct A<int*> {
10ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  void foo();
11ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao};
12ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
13ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotemplate<>
14ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct A<float*> {
15ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  void bar();
16ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao};
17ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
18ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaovoid test(B<int> *b1, B<float> *b2) {
19ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  b1->foo();
20ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  b2->bar();
21ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}
22