p3.cpp revision 9cef0064da0fe93cf60cc351d28ddf2e95fba0b3
12d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: %clang_cc1 -fsyntax-only -verify %s
22d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
32d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesnamespace DeduceVsMember {
42d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  template<typename T>
52d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  struct X {
62d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    template<typename U>
72d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    int &operator==(const U& other) const;
82d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  };
92d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
102d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  template<typename T, typename U>
112d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  float &operator==(const T&, const X<U>&);
122d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
132d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  void test(X<int> xi, X<float> xf) {
142d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    float& ir = (xi == xf);
152d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  }
162d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines}
172d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
182d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesnamespace OrderWithStaticMember {
192d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  struct A {
202d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    template<class T> int g(T**, int=0) { return 0; }
212d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    template<class T> static int g(T*) { return 1; }
222d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  };
232d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  void f() {
24    A a;
25    int **p;
26    a.g(p);
27  }
28}
29