mirror of
https://github.com/dlang/dmd.git
synced 2025-04-26 21:21:48 +03:00
60 lines
1.1 KiB
D
60 lines
1.1 KiB
D
// REQUIRED_ARGS: -o-
|
|
/*
|
|
TEST_OUTPUT:
|
|
---
|
|
1: false
|
|
2: true
|
|
3: true
|
|
---
|
|
*/
|
|
|
|
class A
|
|
{
|
|
abstract void foo();
|
|
}
|
|
|
|
template MixinAbstractBar() { abstract void bar(); }
|
|
|
|
class B1 : A
|
|
{
|
|
// Use pragma instead of static assert, in order to evaluate
|
|
// __traits during ClassDeclaration.semantic().
|
|
pragma(msg, "1: ", __traits(isAbstractClass, typeof(this)));
|
|
override void foo() {}
|
|
}
|
|
|
|
class B2 : A
|
|
{
|
|
pragma(msg, "2: ", __traits(isAbstractClass, typeof(this)));
|
|
override void foo() {}
|
|
abstract void bar();
|
|
}
|
|
|
|
class B3 : A
|
|
{
|
|
pragma(msg, "3: ", __traits(isAbstractClass, typeof(this)));
|
|
override void foo() {}
|
|
mixin MixinAbstractBar!();
|
|
}
|
|
|
|
void main()
|
|
{
|
|
static assert( __traits(compiles, { auto b = new B1(); }));
|
|
static assert(!__traits(compiles, { auto b = new B2(); }));
|
|
static assert(!__traits(compiles, { auto b = new B3(); }));
|
|
}
|
|
|
|
class B : A
|
|
{
|
|
// __traits(isAbstractClass) is not usable in static if condition.
|
|
static assert (!__traits(isAbstractClass, typeof(this)));
|
|
|
|
override void foo()
|
|
{
|
|
}
|
|
}
|
|
|
|
void main2()
|
|
{
|
|
B b = new B();
|
|
}
|