]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/testsuite/g++.dg/template/dependent-expr5.C
call.c (struct conversion_info): Rename 'from_type' to 'from'.
[thirdparty/gcc.git] / gcc / testsuite / g++.dg / template / dependent-expr5.C
CommitLineData
c497db75
AO
1// { dg-do compile }
2
3// Copyright 2005 Free Software Foundation
4// contributed by Alexandre Oliva <aoliva@redhat.com>
5// inspired in the failure reported in Red Hat bugzilla #168260.
6
3784b33c 7template<class F> void bind(F f) {} // { dg-message "note" }
c497db75 8
3784b33c 9template<class F> void bindm(F f) {} // { dg-message "note" }
48ca24b2 10template<class F, class T> void bindm(F (T::*f)(void)) {} // { dg-message "note" }
c497db75
AO
11
12template<class F> void bindn(F f) {}
13template<class F, class T> void bindn(F (*f)(T)) {}
14
15template<class F> void bindb(F f) {}
48ca24b2
JJ
16template<class F, class T> void bindb(F (*f)(T)) {} // { dg-message "note" }
17template<class F, class T> void bindb(F (T::*f)(void)) {} // { dg-message "note" }
c497db75
AO
18
19struct foo {
20 static int baist;
2defb926 21 int bait; // { dg-error "non-static data member" }
c497db75
AO
22 void barf ();
23 static void barf (int);
24
25 struct bar {
26 static int baikst;
27 int baikt;
28 void bark ();
29 static void bark (int);
30
31 bar() {
32 bind (&baist);
33 bind (&foo::baist);
2defb926 34 bind (&bait); // { dg-error "from this location" }
c497db75
AO
35 bind (&foo::bait);
36
37 bind (&baikst);
38 bind (&bar::baikst);
39 bind (&baikt); // ok, this->baikt
40 bind (&bar::baikt);
41
42 bind (&barf); // { dg-error "no matching function" }
3d2f6864 43 // { dg-message "(candidate|deduce template parameter)" "candidate note" { target *-*-* } 42 }
c497db75 44 bind (&foo::barf); // { dg-error "no matching function" }
3d2f6864 45 // { dg-message "(candidate|deduce template parameter)" "candidate note" { target *-*-* } 44 }
c497db75
AO
46
47 bindm (&barf); // { dg-error "no matching function" }
3d2f6864 48 // { dg-message "(candidate|deduce template parameter)" "candidate note" { target *-*-* } 47 }
c497db75
AO
49 bindm (&foo::barf);
50
51 bindn (&barf);
52 bindn (&foo::barf);
53
54 bindb (&barf);
55 bindb (&foo::barf); // { dg-error "ambiguous" }
89606913 56
c497db75
AO
57
58 bind (&bark); // { dg-error "no matching function" }
3d2f6864 59 // { dg-message "(candidate|deduce template parameter)" "candidate note" { target *-*-* } 58 }
c497db75 60 bind (&bar::bark); // { dg-error "no matching function" }
3d2f6864 61 // { dg-message "(candidate|deduce template parameter)" "candidate note" { target *-*-* } 60 }
c497db75
AO
62
63 bindm (&bark); // { dg-error "no matching function" }
3d2f6864 64 // { dg-message "(candidate|deduce template parameter)" "candidate note" { target *-*-* } 63 }
c497db75
AO
65 bindm (&bar::bark);
66
67 bindn (&bark);
68 bindn (&bar::bark);
69
70 bindb (&bark);
71 bindb (&bar::bark); // { dg-error "ambiguous" }
89606913 72
c497db75
AO
73 }
74 };
75
76 template <typename T>
77 struct barT {
78 static int baikst;
79 int baikt;
80 void bark ();
81 static void bark (int);
82
83 barT() {
84 bind (&baist);
85 bind (&foo::baist);
2defb926 86 bind (&bait); // { dg-error "from this location" }
c497db75
AO
87 bind (&foo::bait);
88
89 bind (&baikst);
90 bind (&barT::baikst);
91 bind (&baikt); // ok, this->baikt
92 bind (&barT::baikt);
93
94 bind (&barf); // { dg-error "no matching function" }
3d2f6864 95 // { dg-message "(candidate|deduce template parameter)" "candidate note" { target *-*-* } 94 }
c497db75 96 bind (&foo::barf); // { dg-error "no matching function" }
3d2f6864 97 // { dg-message "(candidate|deduce template parameter)" "candidate note" { target *-*-* } 96 }
c497db75
AO
98
99 bindm (&barf); // { dg-error "no matching function" }
3d2f6864 100 // { dg-message "(candidate|deduce template parameter)" "candidate note" { target *-*-* } 99 }
c497db75
AO
101 bindm (&foo::barf);
102
103 bindn (&barf);
104 bindn (&foo::barf);
105
106 bindb (&barf);
107 bindb (&foo::barf); // { dg-error "ambiguous" }
89606913 108
c497db75
AO
109
110 bind (&bark); // { dg-error "no matching function" }
3d2f6864 111 // { dg-message "(candidate|deduce template parameter)" "candidate note" { target *-*-* } 110 }
c497db75 112 bind (&barT::bark); // { dg-error "no matching function" }
3d2f6864 113 // { dg-message "(candidate|deduce template parameter)" "candidate note" { target *-*-* } 112 }
c497db75
AO
114
115 bindm (&bark); // { dg-error "no matching function" }
3d2f6864 116 // { dg-message "(candidate|deduce template parameter)" "candidate note" { target *-*-* } 115 }
c497db75
AO
117 bindm (&barT::bark);
118
119 bindn (&bark);
120 bindn (&barT::bark);
121
122 bindb (&bark);
123 bindb (&barT::bark); // { dg-error "ambiguous" }
89606913 124
c497db75
AO
125 }
126 };
127
128 bar bard;
129 barT<void> bart;
130} bad;