| // RUN: %clang_cc1 -x c++ -fms-extensions -fsyntax-only -emit-pch -o %t %s | 
 | // RUN: %clang_cc1 -x c++ -fms-extensions -fsyntax-only -include-pch %t %s -verify | 
 |  | 
 | #ifndef HEADER | 
 | #define HEADER | 
 | template<typename T> | 
 | void f(T t) { | 
 |   __if_exists(T::foo) { | 
 |     { } | 
 |     t.foo(); | 
 |   } | 
 |  | 
 |   __if_not_exists(T::bar) { | 
 |     int *i = t; | 
 |     { } | 
 |   } | 
 | } | 
 | #else | 
 | struct HasFoo {  | 
 |   void foo(); | 
 | }; | 
 | struct HasBar {  | 
 |   void bar(int); | 
 |   void bar(float); | 
 | }; | 
 |  | 
 | template void f(HasFoo); // expected-note{{in instantiation of function template specialization 'f<HasFoo>' requested here}} | 
 |                          // expected-error@14{{no viable conversion from 'HasFoo' to 'int *'}} | 
 | template void f(HasBar); | 
 | #endif |