mirror of
https://github.com/dlang/dmd.git
synced 2025-04-26 21:21:48 +03:00
101 lines
2.2 KiB
D
101 lines
2.2 KiB
D
/*
|
|
TEST_OUTPUT:
|
|
---
|
|
fail_compilation/test13667.d(112): Error: cannot cast expression `this` of type `const(Array1!int)` to `Array1!int*`
|
|
fail_compilation/test13667.d(116): Error: template instance `test13667.Array1!int` error instantiating
|
|
fail_compilation/test13667.d(121): Error: cannot cast expression `this` of type `const(Array2!int)` to `B*`
|
|
fail_compilation/test13667.d(125): Error: template instance `test13667.Array2!int` error instantiating
|
|
fail_compilation/test13667.d(136): Error: cannot cast expression `this` of type `const(Array3!int)` to `C*`
|
|
fail_compilation/test13667.d(140): Error: template instance `test13667.Array3!int` error instantiating
|
|
fail_compilation/test13667.d(151): Error: cannot cast expression `this` of type `const(Array4!int)` to `D*`
|
|
fail_compilation/test13667.d(155): Error: template instance `test13667.Array4!int` error instantiating
|
|
fail_compilation/test13667.d(172): Error: cannot cast expression `this` of type `const(Array5!int)` to `F*`
|
|
fail_compilation/test13667.d(176): Error: template instance `test13667.Array5!int` error instantiating
|
|
---
|
|
*/
|
|
|
|
// https://issues.dlang.org/show_bug.cgi?id=13667
|
|
|
|
#line 100
|
|
// 0, no error but also crashed before
|
|
struct Array0(T)
|
|
{
|
|
Array0!(T) impConv() const { return cast(typeof(return))this; }
|
|
alias impConv this;
|
|
}
|
|
|
|
alias AI0 = Array0!int;
|
|
|
|
// 1
|
|
struct Array1(T)
|
|
{
|
|
Array1!(T) impConv() const { return *cast(typeof(return)*)this; }
|
|
alias impConv this;
|
|
}
|
|
|
|
alias AI1 = Array1!int;
|
|
|
|
// 2
|
|
struct Array2(T)
|
|
{
|
|
B impConv() const { return cast(B*)this; }
|
|
alias impConv this;
|
|
}
|
|
|
|
alias AI2 = Array2!int;
|
|
|
|
struct B
|
|
{
|
|
AI2 get() { return AI2(); }
|
|
alias get this;
|
|
}
|
|
|
|
// 3
|
|
struct Array3(T)
|
|
{
|
|
C impConv() const { return cast(C*)this; }
|
|
alias impConv this;
|
|
}
|
|
|
|
alias AI3 = Array3!int;
|
|
|
|
struct C
|
|
{
|
|
C get() { return C(); }
|
|
alias get this;
|
|
}
|
|
|
|
// 4
|
|
struct Array4(T)
|
|
{
|
|
D impConv() const { return cast(D*)this; }
|
|
alias impConv this;
|
|
}
|
|
|
|
alias AI4 = Array4!int;
|
|
|
|
struct D
|
|
{
|
|
E get() { return E(); }
|
|
alias get this;
|
|
}
|
|
|
|
struct E
|
|
{
|
|
AI4 ai;
|
|
alias ai this;
|
|
}
|
|
|
|
// 5: test enum based on struct, needed to use base type (toBasetype())
|
|
struct Array5(T)
|
|
{
|
|
F impConv() const { return cast(F*)this; }
|
|
alias impConv this;
|
|
}
|
|
|
|
alias AI5 = Array5!int;
|
|
|
|
enum F : AI5
|
|
{
|
|
f = AI5()
|
|
}
|