blob: 0592d448b1f8adf9fc982decd6bab19b8889da54 [file] [log] [blame]
/*
https://issues.dlang.org/show_bug.cgi?id=21693
RUN_OUTPUT:
---
CppA:
1: CppA.~this
CppB:
2: CppB.~this
2: CppA.~this
CppC:
3: CppC.~this
3: CppB.~this
3: CppA.~this
CppC:
4: CppC.~this
4: CppB.~this
4: CppA.~this
CppNoDestruct:
DA:
1: DA.~this
DB:
2: DB.~this
2: DA.~this
DC:
3: DC.~this
3: DB.~this
3: DA.~this
DC:
4: DC.~this
4: DB.~this
4: DA.~this
---
*/
extern (C) int printf(scope const char*, ...);
extern (C++) class CppA
{
int num;
this(int num)
{
this.num = num;
}
~this()
{
printf("%d: CppA.~this\n", num);
}
}
extern (C++) class CppB : CppA
{
this(int num)
{
super(num);
}
~this()
{
printf("%d: CppB.~this\n", num);
}
}
extern (C++) class CppC : CppB
{
this(int num)
{
super(num);
}
~this()
{
printf("%d: CppC.~this\n", num);
}
}
extern (D) class DA
{
int num;
this(int num)
{
this.num = num;
}
~this()
{
printf("%d: DA.~this\n", num);
}
}
extern (D) class DB : DA
{
this(int num)
{
super(num);
}
~this()
{
printf("%d: DB.~this\n", num);
}
}
extern (D) class DC : DB
{
this(int num)
{
super(num);
}
~this()
{
printf("%d: DC.~this\n", num);
}
}
extern (C++) class CppNoDestruct
{
int num;
this(int num)
{
this.num = num;
}
}
void main()
{
printf("CppA:\n"); { scope a = new CppA(1); }
printf("CppB:\n"); { scope CppA b = new CppB(2); }
printf("CppC:\n"); { scope CppA c = new CppC(3); }
printf("CppC:\n"); { scope CppB c2 = new CppC(4); }
printf("CppNoDestruct:\n");
{
scope const nd = new CppNoDestruct(1);
}
printf("DA:\n"); { scope a = new DA(1); }
printf("DB:\n"); { scope DA b = new DB(2); }
printf("DC:\n"); { scope DA c = new DC(3); }
printf("DC:\n"); { scope DB c2 = new DC(4); }
}