blob: 4ff13af2923903958abb5d3c0c987dd25cb2326d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
|
// P0847R7
// { dg-do compile { target c++23 } }
// rejection and diagnosis of an incorrectly declared xobj parameter
// default argument
struct S {
void f0(this S = {}) {} // { dg-error "an explicit object parameter may not have a default argument" }
void f1(this S = {}); // { dg-error "an explicit object parameter may not have a default argument" }
void f2(this S);
void f10(this S s = {}) {} // { dg-error "an explicit object parameter may not have a default argument" }
void f11(this S s = {}); // { dg-error "an explicit object parameter may not have a default argument" }
void f12(this S s);
};
void S::f1(this S) {}
void S::f2(this S = {}) {} // { dg-error "an explicit object parameter may not have a default argument" }
void S::f11(this S s) {}
void S::f12(this S s = {}) {} // { dg-error "an explicit object parameter may not have a default argument" }
// parameter pack
struct S0 {
template<typename Selves>
void f(this Selves...) {} // { dg-warning "omission of ',' before varargs '...' is deprecated" "" { target c++26 } }
template<typename Selves>
void g(this Selves... selves) {} // { dg-error "an explicit object parameter cannot be a function parameter pack" }
// { dg-error "contains no parameter packs" "" { target *-*-* } .-1 }
void h(this auto...) {} // { dg-error "an explicit object parameter cannot be a function parameter pack" }
void j(this auto... selves) {} // { dg-error "an explicit object parameter cannot be a function parameter pack" }
template<typename ...Selves>
void k(this Selves...) {} // { dg-error "an explicit object parameter cannot be a function parameter pack" }
template<typename Selves>
void fd(this Selves...); // { dg-warning "omission of ',' before varargs '...' is deprecated" "" { target c++26 } }
template<typename Selves>
void gd(this Selves... selves); // { dg-error "an explicit object parameter cannot be a function parameter pack" }
// { dg-error "contains no parameter packs" "" { target *-*-* } .-1 }
void hd(this auto...); // { dg-error "an explicit object parameter cannot be a function parameter pack" }
void jd(this auto... selves); // { dg-error "an explicit object parameter cannot be a function parameter pack" }
template<typename ...Selves>
void kd(this Selves...); // { dg-error "an explicit object parameter cannot be a function parameter pack" }
};
struct S1 {
template<typename Selves>
void f(this Selves&...) {} // { dg-warning "omission of ',' before varargs '...' is deprecated" "" { target c++26 } }
template<typename Selves>
void g(this Selves&... selves) {} // { dg-error "an explicit object parameter cannot be a function parameter pack" }
// { dg-error "contains no parameter packs" "" { target *-*-* } .-1 }
void h(this auto&...) {} // { dg-error "an explicit object parameter cannot be a function parameter pack" }
void j(this auto&... selves) {} // { dg-error "an explicit object parameter cannot be a function parameter pack" }
template<typename ...Selves>
void k(this Selves&...) {} // { dg-error "an explicit object parameter cannot be a function parameter pack" }
template<typename Selves>
void fd(this Selves&...); // { dg-warning "omission of ',' before varargs '...' is deprecated" "" { target c++26 } }
template<typename Selves>
void gd(this Selves&... selves); // { dg-error "an explicit object parameter cannot be a function parameter pack" }
// { dg-error "contains no parameter packs" "" { target *-*-* } .-1 }
void hd(this auto&...); // { dg-error "an explicit object parameter cannot be a function parameter pack" }
void jd(this auto&... selves); // { dg-error "an explicit object parameter cannot be a function parameter pack" }
template<typename ...Selves>
void kd(this Selves&...); // { dg-error "an explicit object parameter cannot be a function parameter pack" }
};
struct S2 {
template<typename Selves>
void f(this Selves&&...) {} // { dg-warning "omission of ',' before varargs '...' is deprecated" "" { target c++26 } }
template<typename Selves>
void g(this Selves&&... selves) {} // { dg-error "an explicit object parameter cannot be a function parameter pack" }
// { dg-error "contains no parameter packs" "" { target *-*-* } .-1 }
void h(this auto&&...) {} // { dg-error "an explicit object parameter cannot be a function parameter pack" }
void j(this auto&&... selves) {} // { dg-error "an explicit object parameter cannot be a function parameter pack" }
template<typename ...Selves>
void k(this Selves&&...) {} // { dg-error "an explicit object parameter cannot be a function parameter pack" }
template<typename Selves>
void fd(this Selves&&...); // { dg-warning "omission of ',' before varargs '...' is deprecated" "" { target c++26 } }
template<typename Selves>
void gd(this Selves&&... selves); // { dg-error "an explicit object parameter cannot be a function parameter pack" }
// { dg-error "contains no parameter packs" "" { target *-*-* } .-1 }
void hd(this auto&&...); // { dg-error "an explicit object parameter cannot be a function parameter pack" }
void jd(this auto&&... selves); // { dg-error "an explicit object parameter cannot be a function parameter pack" }
template<typename ...Selves>
void kd(this Selves&&...); // { dg-error "an explicit object parameter cannot be a function parameter pack" }
};
struct S3 {
template<typename Selves>
void f(this Selves const&...) {} // { dg-warning "omission of ',' before varargs '...' is deprecated" "" { target c++26 } }
template<typename Selves>
void g(this Selves const&... selves) {} // { dg-error "an explicit object parameter cannot be a function parameter pack" }
// { dg-error "contains no parameter packs" "" { target *-*-* } .-1 }
void h(this auto const&...) {} // { dg-error "an explicit object parameter cannot be a function parameter pack" }
void j(this auto const&... selves) {} // { dg-error "an explicit object parameter cannot be a function parameter pack" }
template<typename ...Selves>
void k(this Selves const&...) {} // { dg-error "an explicit object parameter cannot be a function parameter pack" }
template<typename Selves>
void fd(this Selves const&...); // { dg-warning "omission of ',' before varargs '...' is deprecated" "" { target c++26 } }
template<typename Selves>
void gd(this Selves const&... selves); // { dg-error "an explicit object parameter cannot be a function parameter pack" }
// { dg-error "contains no parameter packs" "" { target *-*-* } .-1 }
void hd(this auto const&...); // { dg-error "an explicit object parameter cannot be a function parameter pack" }
void jd(this auto const&... selves); // { dg-error "an explicit object parameter cannot be a function parameter pack" }
template<typename ...Selves>
void kd(this Selves const&...); // { dg-error "an explicit object parameter cannot be a function parameter pack" }
};
struct S4 {
template<typename Selves>
void f(this Selves const&&...) {} // { dg-warning "omission of ',' before varargs '...' is deprecated" "" { target c++26 } }
template<typename Selves>
void g(this Selves const&&... selves) {} // { dg-error "an explicit object parameter cannot be a function parameter pack" }
// { dg-error "contains no parameter packs" "" { target *-*-* } .-1 }
void h(this auto const&&...) {} // { dg-error "an explicit object parameter cannot be a function parameter pack" }
void j(this auto const&&... selves) {} // { dg-error "an explicit object parameter cannot be a function parameter pack" }
template<typename ...Selves>
void k(this Selves const&&...) {} // { dg-error "an explicit object parameter cannot be a function parameter pack" }
template<typename Selves>
void fd(this Selves const&&...); // { dg-warning "omission of ',' before varargs '...' is deprecated" "" { target c++26 } }
template<typename Selves>
void gd(this Selves const&&... selves); // { dg-error "an explicit object parameter cannot be a function parameter pack" }
// { dg-error "contains no parameter packs" "" { target *-*-* } .-1 }
void hd(this auto const&&...); // { dg-error "an explicit object parameter cannot be a function parameter pack" }
void jd(this auto const&&... selves); // { dg-error "an explicit object parameter cannot be a function parameter pack" }
template<typename ...Selves>
void kd(this Selves const&&...); // { dg-error "an explicit object parameter cannot be a function parameter pack" }
};
|