1 // RUN: %clang_cc1 -fsyntax-only -verify %s
3 // This is the function actually selected during overload resolution, and the
5 template <typename T
> void f(T
*, int) {}
7 template <typename T
> struct S
;
8 template <typename T
> struct S_
: S
<T
> { typedef int type
; }; // expected-note{{in instantiation}}
9 template <typename T
> struct S
{
10 // Force T to have a complete type here so we can observe instantiations with
12 T t
; // expected-error{{field has incomplete type}}
15 // Provide a bad class and an overload that instantiates templates with it.
16 class NoDefinition
; // expected-note{{forward declaration}}
17 template <typename T
> S_
<NoDefinition
>::type
f(T
*, NoDefinition
*); // expected-note{{in instantiation}}
23 // Ensure that we instantiate an overloaded function if it's selected by
24 // overload resolution when initializing a function pointer.
25 template<typename T
> struct X
{
26 static T
f() { T::error
; } // expected-error {{has no members}}
29 void (*p
)() = &X
<void>::f
; // expected-note {{instantiation of}}
35 void operator+(int) {}
37 void operator[](int) {}
45 template<typename T
> void f(B b
) {
50 template void f
<void>(B
);