1ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao// RUN: %clang_cc1 -fsyntax-only -verify %s
2ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao// Test instantiation of member functions of class templates defined out-of-line
3ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotemplate<typename T, typename U>
4ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct X0 {
5ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  void f(T *t, const U &u);
6ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  void f(T *);
7ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao};
8ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
9ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotemplate<typename T, typename U>
10ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaovoid X0<T, U>::f(T *t, const U &u) {
11ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  *t = u; // expected-error{{not assignable}}
12ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}
13ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
14ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaovoid test_f(X0<float, int> xfi, X0<void, int> xvi, float *fp, void *vp, int i) {
15ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  xfi.f(fp, i);
16ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  xvi.f(vp, i); // expected-note{{instantiation}}
17ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}
18