blob: 58397f35fd0d8f0a47a64911cac24c277c2f069e [file] [log] [blame]
/*
TEST_OUTPUT:
---
fail_compilation/issue22820.d(138): Error: upper and lower bounds are needed to slice a pointer
fail_compilation/issue22820.d(138): pointer `s1` points to an aggregate that defines an `opIndex`, perhaps you meant `(*s1)[]`
fail_compilation/issue22820.d(139): Error: upper and lower bounds are needed to slice a pointer
fail_compilation/issue22820.d(139): pointer `s2` points to an aggregate that defines an `opSlice`, perhaps you meant `(*s2)[]`
fail_compilation/issue22820.d(140): Error: upper and lower bounds are needed to slice a pointer
fail_compilation/issue22820.d(140): pointer `s3` points to an aggregate that defines an `opIndex`, perhaps you meant `(*s3)[]`
fail_compilation/issue22820.d(141): Error: upper and lower bounds are needed to slice a pointer
fail_compilation/issue22820.d(141): pointer `cp` points to an aggregate that defines an `opIndex`, perhaps you meant `(*cp)[]`
fail_compilation/issue22820.d(142): Error: upper and lower bounds are needed to slice a pointer
fail_compilation/issue22820.d(142): pointer `e` points to an aggregate that defines an `opIndex`, perhaps you meant `(*e)[]`
---
*/
#line 100
// normal functions
struct S1 {
int[] opIndex() { return a; }
int[] a;
}
// opSlice alternative
struct S2 {
int[] opSlice() { return a; }
int[] a;
}
// templates
struct S3 {
int[] opIndex()() { return a; }
int[] a;
}
class C {
int[] opIndex()() { return a; }
int[] a;
}
enum E : S1
{
a = S1([1])
}
void main() {
S1* s1 = new S1;
S2* s2 = new S2;
S3* s3 = new S3;
C c = new C;
C* cp = &c;
E* e = new E;
int* p;
p = s1[].ptr;
p = s2[].ptr;
p = s3[].ptr;
p = cp[].ptr;
p = e[].ptr;
p = (*s1)[].ptr;
p = (*s2)[].ptr;
p = (*s3)[].ptr;
p = (*cp)[].ptr;
p = (*e)[].ptr;
}