70 lines · cpp
1// RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify %s2 3template<typename T>4struct set{};5struct Value {6 template<typename T>7 void set(T value) {}8 9 void resolves_to_same() {10 Value v;11 v.set<double>(3.2);12 }13};14void resolves_to_different() {15 {16 Value v;17 // The fact that the next line is a warning rather than an error is an18 // extension.19 v.set<double>(3.2);20 }21 {22 int set; // Non-template.23 Value v;24 v.set<double>(3.2);25 }26}27 28namespace rdar9915664 {29 struct A {30 template<typename T> void a();31 };32 33 struct B : A { };34 35 struct C : A { };36 37 struct D : B, C {38 A &getA() { return static_cast<B&>(*this); }39 40 void test_a() {41 getA().a<int>();42 }43 };44}45 46namespace PR11856 {47 template<typename T> T end(T);48 49 template <typename T>50 void Foo() {51 T it1;52 if (it1->end < it1->end) {53 }54 }55 56 template<typename T> T *end(T*);57 58 class X { };59 template <typename T>60 void Foo2() {61 T it1;62 if (it1->end < it1->end) {63 }64 65 X *x;66 if (x->end < 7) { // expected-error{{no member named 'end' in 'PR11856::X'}}67 }68 }69}70