#include <iostream>
#include <type_traits>
using namespace std;
class Base
{ } ;
class Derived : public Base
{ } ;
template < class T>
class Foo
{
public :
Foo( )
{
static_assert ( std:: is_base_of < Base,T> :: value , "Error: Type T not derived from Base" ) ;
}
} ;
class Lol
{
} ;
int main( ) {
Foo< Derived> foo1;
Foo< Lol> foo2;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZV90cmFpdHM+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjbGFzcyBCYXNlCnt9OwoKY2xhc3MgRGVyaXZlZCA6IHB1YmxpYyBCYXNlCnt9OwoKdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzIEZvbwp7CnB1YmxpYzoKCUZvbygpCgl7CgkJc3RhdGljX2Fzc2VydCAoc3RkOjppc19iYXNlX29mPEJhc2UsVD46OnZhbHVlLCAiRXJyb3I6IFR5cGUgVCBub3QgZGVyaXZlZCBmcm9tIEJhc2UiKTsKCX0KfTsKCmNsYXNzIExvbAp7Cn07CgppbnQgbWFpbigpIHsKCglGb288RGVyaXZlZD4gZm9vMTsKCUZvbzxMb2w+IGZvbzI7CgoJcmV0dXJuIDA7Cgp9