mirror of
https://github.com/dlang/dmd.git
synced 2025-04-26 05:00:16 +03:00
161 lines
3.6 KiB
D
161 lines
3.6 KiB
D
/+
|
|
TEST_OUTPUT:
|
|
---
|
|
fail_compilation/testOpApply.d(27): Error: `testOpApply.SameAttr.opApply` called with argument types `(int delegate(int i) pure nothrow @nogc @safe)` matches multiple overloads after qualifier conversion:
|
|
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 multiple overloads after qualifier conversion:
|
|
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) {}
|
|
}
|