1 /*
2 TEST_OUTPUT:
3 ---
4 fail_compilation/diag12432.d(55): Error: cannot infer argument types, expected 1 argument, not 2
5 fail_compilation/diag12432.d(56): Error: cannot infer argument types, expected 2 arguments, not 3
6 fail_compilation/diag12432.d(57): Error: cannot infer argument types, expected 1 argument, not 2
7 fail_compilation/diag12432.d(58): Error: cannot infer argument types, expected 1 argument, not 2
8 fail_compilation/diag12432.d(59): Error: cannot infer argument types, expected 2 arguments, not 3
9 fail_compilation/diag12432.d(60): Error: cannot infer argument types, expected 2 arguments, not 3
10 ---
11 */
12 
13 struct R1
14 {
frontR115     @property int front() { return 0; }
16     enum bool empty = false;
popFrontR117     void popFront() { }
18 }
19 
Tuple(T...)20 struct Tuple(T...)
21 {
22     T t;
23     alias t this;
24 }
25 
26 struct R2
27 {
28     @property Tuple!(int, float) front() { return typeof(return).init; }
29     enum bool empty = false;
popFrontR230     void popFront() { }
31 }
32 
33 struct OpApply1Func
34 {
opApply(int function (int))35     int opApply(int function(int)) { return 0; }
36 }
37 
38 struct OpApply1Deleg
39 {
opApplyOpApply1Deleg40     int opApply(int delegate(int)) { return 0; }
41 }
42 
43 struct OpApply2Func
44 {
opApply(int function (int,float))45     int opApply(int function(int, float)) { return 0; }
46 }
47 
48 struct OpApply2Deleg
49 {
opApplyOpApply2Deleg50     int opApply(int delegate(int, float)) { return 0; }
51 }
52 
main()53 void main()
54 {
55     foreach (a, b; R1()) { }
56     foreach (a, b, c; R2()) { }
57     foreach (a, b; OpApply1Func()) { }
58     foreach (a, b; OpApply1Deleg()) { }
59     foreach (a, b, c; OpApply2Func()) { }
60     foreach (a, b, c; OpApply2Deleg()) { }
61 }
62