1*67e74705SXin Li // RUN: %clang_cc1 -x c++ -fms-extensions -fsyntax-only -emit-pch -o %t %s 2*67e74705SXin Li // RUN: %clang_cc1 -x c++ -fms-extensions -fsyntax-only -include-pch %t %s -verify 3*67e74705SXin Li 4*67e74705SXin Li #ifndef HEADER 5*67e74705SXin Li #define HEADER 6*67e74705SXin Li template<typename T> f(T t)7*67e74705SXin Livoid f(T t) { 8*67e74705SXin Li __if_exists(T::foo) { 9*67e74705SXin Li { } 10*67e74705SXin Li t.foo(); 11*67e74705SXin Li } 12*67e74705SXin Li 13*67e74705SXin Li __if_not_exists(T::bar) { 14*67e74705SXin Li int *i = t; 15*67e74705SXin Li { } 16*67e74705SXin Li } 17*67e74705SXin Li } 18*67e74705SXin Li #else 19*67e74705SXin Li struct HasFoo { 20*67e74705SXin Li void foo(); 21*67e74705SXin Li }; 22*67e74705SXin Li struct HasBar { 23*67e74705SXin Li void bar(int); 24*67e74705SXin Li void bar(float); 25*67e74705SXin Li }; 26*67e74705SXin Li 27*67e74705SXin Li template void f(HasFoo); // expected-note{{in instantiation of function template specialization 'f<HasFoo>' requested here}} 28*67e74705SXin Li // expected-error@14{{no viable conversion from 'HasFoo' to 'int *'}} 29*67e74705SXin Li template void f(HasBar); 30*67e74705SXin Li #endif 31