#include <iostream>
#include <type_traits>
using namespace std;
struct A{ } ;
struct B : public A{ } ;
struct Bb : B{ } ;
struct X { } ;
template < typename T>
class D {
static_assert( std:: is_base_of < A,T> :: value , "not derived from A" ) ;
} ;
int main( ) {
D< B> ( ) ;
D< Bb> ( ) ;
D< X> ( ) ;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZV90cmFpdHM+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJ1Y3QgQXt9OwpzdHJ1Y3QgQiA6IHB1YmxpYyBBe307CnN0cnVjdCBCYiA6IEJ7fTsKc3RydWN0IFgge307Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpjbGFzcyBEIHsKIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mPEEsVD46OnZhbHVlLCAibm90IGRlcml2ZWQgZnJvbSBBIik7Cn07CgppbnQgbWFpbigpIHsKIEQ8Qj4oKTsKIEQ8QmI+KCk7CiBEPFg+KCk7CiByZXR1cm4gMDsKfQ==
compilation info
prog.cpp: In instantiation of 'class D<X>':
prog.cpp:18:7: required from here
prog.cpp:12:2: error: static assertion failed: not derived from A
static_assert(std::is_base_of<A,T>::value, "not derived from A");
^
stdout