dmd/compiler/test/fail_compilation/fail_opover.d

67 lines
3.4 KiB
D

// REQUIRED_ARGS: -o-
/*
TEST_OUTPUT:
---
fail_compilation/fail_opover.d(39): Error: no `[]` operator overload for type `object.Object`
$p:object.d$(110): perhaps define `auto opIndex() {}` for `object.Object`
fail_compilation/fail_opover.d(43): Error: no `[]` operator overload for type `TestS`
fail_compilation/fail_opover.d(41): perhaps define `auto opIndex() {}` for `fail_opover.test1.TestS`
fail_compilation/fail_opover.d(55): Error: no `[]` operator overload for type `S`
fail_compilation/fail_opover.d(48): perhaps define `auto opIndex() {}` for `fail_opover.test2.S`
fail_compilation/fail_opover.d(56): Error: no `[]` operator overload for type `S`
fail_compilation/fail_opover.d(48): perhaps define `auto opIndex(int) {}` for `fail_opover.test2.S`
fail_compilation/fail_opover.d(57): Error: no `[1..2]` operator overload for type `S`
fail_compilation/fail_opover.d(48): perhaps define `auto opSlice(int lower, int upper) {}` for `fail_opover.test2.S`
fail_compilation/fail_opover.d(58): Error: no `[]` operator overload for type `S`
fail_compilation/fail_opover.d(48): perhaps define `auto opIndex() {}` for `fail_opover.test2.S`
fail_compilation/fail_opover.d(59): Error: no `[]` operator overload for type `S`
fail_compilation/fail_opover.d(48): perhaps define `auto opIndex(int) {}` for `fail_opover.test2.S`
fail_compilation/fail_opover.d(60): Error: no `[1..2]` operator overload for type `S`
fail_compilation/fail_opover.d(48): perhaps define `auto opSlice(int lower, int upper) {}` for `fail_opover.test2.S`
fail_compilation/fail_opover.d(61): Error: no `[]` operator overload for type `S`
fail_compilation/fail_opover.d(48): perhaps define `auto opIndex() {}` for `fail_opover.test2.S`
fail_compilation/fail_opover.d(62): Error: no `[]` operator overload for type `S`
fail_compilation/fail_opover.d(48): perhaps define `auto opIndex(int) {}` for `fail_opover.test2.S`
fail_compilation/fail_opover.d(63): Error: no `[1..2]` operator overload for type `S`
fail_compilation/fail_opover.d(48): perhaps define `auto opSlice(int lower, int upper) {}` for `fail_opover.test2.S`
fail_compilation/fail_opover.d(64): Error: no `[]` operator overload for type `S`
fail_compilation/fail_opover.d(48): perhaps define `auto opIndex() {}` for `fail_opover.test2.S`
fail_compilation/fail_opover.d(65): Error: no `[]` operator overload for type `S`
fail_compilation/fail_opover.d(48): perhaps define `auto opIndex(int) {}` for `fail_opover.test2.S`
fail_compilation/fail_opover.d(66): Error: no `[1..2]` operator overload for type `S`
fail_compilation/fail_opover.d(48): perhaps define `auto opSlice(int lower, int upper) {}` for `fail_opover.test2.S`
---
*/
void test1()
{
Object m;
m[] = error;
struct TestS {}
TestS s;
s[] = error;
}
void test2()
{
struct S
{
void func(int) {}
alias func this;
}
S s;
// The errors failing aliasthis access need to be gagged for better error messages.
s[]; // in ArrayExp::op_overload()
s[1]; // ditto
s[1..2]; // ditto
+s[]; // in UnaExp::op_overload()
+s[1]; // ditto
+s[1..2]; // ditto
s[] = 3; // in AssignExp::semantic()
s[1] = 3; // ditto
s[1..2] = 3; // ditto
s[] += 3; // in BinAssignExp::op_overload()
s[1] += 3; // ditto
s[1..2] += 3; // ditto
}