blob: edf137636f2a3d9f015824bfcf33996f8fe886d0 [file] [log] [blame]
// 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();
}