/+
TEST_OUTPUT:
---
fail_compilation/testOpApply.d(27): Error: `testOpApply.SameAttr.opApply` called with argument types `(int delegate(int i) pure nothrow @nogc @safe)` matches both:
fail_compilation/testOpApply.d(13):     `testOpApply.SameAttr.opApply(int delegate(int) @system dg)`
and:
fail_compilation/testOpApply.d(18):     `testOpApply.SameAttr.opApply(int delegate(int) @system dg)`
---
+/

struct SameAttr
{
    int opApply(int delegate(int) @system dg) @system
    {
        return 0;
    }

    int opApply(int delegate(int) @system dg) @safe
    {
        return 0;
    }
}

void testSameAttr() @safe
{
    SameAttr sa;
    foreach (int i; sa) {}
}

/+
TEST_OUTPUT:
---
fail_compilation/testOpApply.d(104): Error: `testOpApply.SameAttr.opApply` called with argument types `(int delegate(int i) pure nothrow @nogc @system)` matches both:
fail_compilation/testOpApply.d(13):     `testOpApply.SameAttr.opApply(int delegate(int) @system dg)`
and:
fail_compilation/testOpApply.d(18):     `testOpApply.SameAttr.opApply(int delegate(int) @system dg)`
---
+/
#line 100

void testSameAttr() @system
{
    SameAttr sa;
    foreach (int i; sa) {}
}

/+
TEST_OUTPUT:
---
fail_compilation/testOpApply.d(217): Error: `sa.opApply` matches more than one declaration:
`fail_compilation/testOpApply.d(203)`:     `int(int delegate(int) dg)`
and:
`fail_compilation/testOpApply.d(208)`:     `int(int delegate(string) dg)`
fail_compilation/testOpApply.d(217): Error: cannot uniquely infer `foreach` argument types
---
+/
#line 200

struct DifferentTypes
{
    int opApply(int delegate(int) dg)
    {
        return 0;
    }

    int opApply(int delegate(string) dg)
    {
        return 0;
    }
}

void testDifferentTypes()
{
    DifferentTypes sa;
    foreach (i; sa) {}
}

/+
TEST_OUTPUT:
---
fail_compilation/testOpApply.d(317): Error: `sa.opApply` matches more than one declaration:
`fail_compilation/testOpApply.d(303)`:     `int(int delegate(int) dg)`
and:
`fail_compilation/testOpApply.d(308)`:     `int(int delegate(long) dg)`
fail_compilation/testOpApply.d(317): Error: cannot uniquely infer `foreach` argument types
---
+/
#line 300

struct CovariantTypes
{
    int opApply(int delegate(int) dg)
    {
        return 0;
    }

    int opApply(int delegate(long) dg)
    {
        return 0;
    }
}

void testCovariantTypes()
{
    CovariantTypes sa;
    foreach (i; sa) {}
}

/+
See https://issues.dlang.org/show_bug.cgi?id=21683

TEST_OUTPUT:
---
fail_compilation/testOpApply.d(420): Error: `sa.opApply` matches more than one declaration:
`fail_compilation/testOpApply.d(404)`:     `int(int delegate(int) dg)`
and:
`fail_compilation/testOpApply.d(410)`:     `int(int delegate(ref int) dg)`
fail_compilation/testOpApply.d(420): Error: cannot uniquely infer `foreach` argument types
---
+/
#line 400

struct DifferentQualifiers
{
    int x;
    int opApply(int delegate(int) dg)
    {
        x = 1;
        return 0;
    }

    int opApply(int delegate(ref int) dg)
    {
        x = 2;
        return 0;
    }
}

void testDifferentQualifiers()
{
    DifferentQualifiers sa;
    foreach (i; sa) {}
}

/+
TEST_OUTPUT:
---
fail_compilation/testOpApply.d(504): Error: `sa.opApply` matches more than one declaration:
`fail_compilation/testOpApply.d(404)`:     `int(int delegate(int) dg)`
and:
`fail_compilation/testOpApply.d(410)`:     `int(int delegate(ref int) dg)`
fail_compilation/testOpApply.d(504): Error: cannot uniquely infer `foreach` argument types
---
+/
#line 500

void testDifferentQualifiersRef()
{
    DifferentQualifiers sa;
    foreach (ref i; sa) {}
}
