1ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao// RUN: %clang_cc1 -fsyntax-only -verify %s
2ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
3ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotemplate<typename T>
4ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct A {
5ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  template<typename U> A<T> operator+(U);
6ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao};
7ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
8ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotemplate<int Value, typename T> bool operator==(A<T>, A<T>);
9ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
10ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotemplate<> bool operator==<0>(A<int>, A<int>);
11ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
12ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaobool test_qualified_id(A<int> ai) {
13ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  return ::operator==<0, int>(ai, ai);
14ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}
15ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
16ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaovoid test_op(A<int> a, int i) {
17ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  const A<int> &air = a.operator+<int>(i);
18ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}
19ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
20ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotemplate<typename T>
21ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaovoid test_op_template(A<T> at, T x) {
22ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  const A<T> &atr = at.template operator+<T>(x);
23ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  const A<T> &atr2 = at.A::template operator+<T>(x);
24ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  // FIXME: unrelated template-name instantiation issue
25ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  //  const A<T> &atr3 = at.template A<T>::template operator+<T>(x);
26ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}
27ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
28ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotemplate void test_op_template<float>(A<float>, float);
29