#include <iostream>
#include <type_traits>
using namespace std;
class A{ } ;
class B: public A { } ;
template < bool Inherited>
class Checker; // error, not implemented if not inherited
template <>
class Checker< true > { /* empty*/ } ;
template < typename T>
class Test
{
private :
//Checker< std::is_base_of<A,T>::value > check;
// or use static_assert
static_assert( std:: is_base_of < A,T> :: value ,"Type T must inherit from A" ) ;
} ;
int main( )
{
Test< B> test1;
Test< int > test2;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZV90cmFpdHM+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjbGFzcyBBe307CmNsYXNzIEI6cHVibGljIEEge307Cgp0ZW1wbGF0ZSA8Ym9vbCBJbmhlcml0ZWQ+CmNsYXNzIENoZWNrZXI7ICAvLyBlcnJvciwgbm90IGltcGxlbWVudGVkIGlmIG5vdCBpbmhlcml0ZWQKCnRlbXBsYXRlPD4KY2xhc3MgQ2hlY2tlcjx0cnVlPiB7IC8qIGVtcHR5Ki8gfTsKCgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KY2xhc3MgVGVzdAp7CgkgcHJpdmF0ZToKCQkvL0NoZWNrZXI8IHN0ZDo6aXNfYmFzZV9vZjxBLFQ+Ojp2YWx1ZSA+IGNoZWNrOwoJCS8vICAgb3IgdXNlIHN0YXRpY19hc3NlcnQKCQlzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZjxBLFQ+Ojp2YWx1ZSwiVHlwZSBUIG11c3QgaW5oZXJpdCBmcm9tIEEiKTsKfTsKCmludCBtYWluKCkKewoJCglUZXN0PEI+IHRlc3QxOwoJVGVzdDxpbnQ+IHRlc3QyOwoJcmV0dXJuIDA7Cn0=
compilation info
prog.cpp: In instantiation of 'class Test<int>':
prog.cpp:28:12: required from here
prog.cpp:21:3: error: static assertion failed: Type T must inherit from A
static_assert(std::is_base_of<A,T>::value,"Type T must inherit from A");
^
stdout