basic.cpp revision a933319ebf754396623165f9dc0a29c2a48879f5
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// RUN: %clang_cc1 -fsyntax-only -verify %s 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template<typename T> struct A { }; 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template<typename T> A<T> f0(T*); 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void test_f0(int *ip, float const *cfp) { 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) A<int> a0 = f0(ip); 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) A<const float> a1 = f0(cfp); 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template<typename T> void f1(T*, int); 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void test_f1(int *ip, float fv) { 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) f1(ip, fv); 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO: this diagnostic can and should improve 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template<typename T> void f2(T*, T*); // expected-note {{candidate template ignored: failed template argument deduction}} \ 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// expected-note{{candidate template ignored: deduced conflicting types for parameter 'T' ('int' vs. 'float')}} 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct ConvToIntPtr { 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) operator int*() const; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void test_f2(int *ip, float *fp) { 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) f2(ip, ConvToIntPtr()); // expected-error{{no matching function}} 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) f2(ip, ip); // okay 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) f2(ip, fp); // expected-error{{no matching function}} 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)