1039bfd7e038eb852c66be03bb34c47fa2a7b79a7Eli Friedman// RUN: %clang_cc1 -fsyntax-only -verify %s 2039bfd7e038eb852c66be03bb34c47fa2a7b79a7Eli Friedman// PR7837 3039bfd7e038eb852c66be03bb34c47fa2a7b79a7Eli Friedman 4039bfd7e038eb852c66be03bb34c47fa2a7b79a7Eli Friedmantemplate<class T> struct C1 { void operator()(T); }; 5039bfd7e038eb852c66be03bb34c47fa2a7b79a7Eli Friedmantemplate<class T> struct C2; // expected-note {{template is declared here}} 6039bfd7e038eb852c66be03bb34c47fa2a7b79a7Eli Friedmantemplate<class T> void foo(T); 7039bfd7e038eb852c66be03bb34c47fa2a7b79a7Eli Friedmanvoid wrap() { 8039bfd7e038eb852c66be03bb34c47fa2a7b79a7Eli Friedman foo(&C1<int>::operator()); 9039bfd7e038eb852c66be03bb34c47fa2a7b79a7Eli Friedman foo(&C1<int>::operator+); // expected-error {{no member named 'operator+' in 'C1<int>'}} 10039bfd7e038eb852c66be03bb34c47fa2a7b79a7Eli Friedman foo(&C2<int>::operator+); // expected-error {{implicit instantiation of undefined template 'C2<int>'}} 11039bfd7e038eb852c66be03bb34c47fa2a7b79a7Eli Friedman} 12