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