#include <iostream>
#include <utility>
#include <boost/type_traits.hpp>
struct Bar { virtual ~Bar( ) { } } ;
struct Foo: Bar { } ;
struct Faz { } ;
template < typename T>
typename boost:: enable_if < boost:: is_base_of < Bar, T>> :: type
foo( char const * type, T) {
std:: cout << type << " is derived from Bar\n " ;
}
template < typename T>
typename boost:: disable_if < boost:: is_base_of < Bar, T>> :: type
foo( char const * type, T) {
std:: cout << type << " is NOT derived from Bar\n " ;
}
int main( )
{
foo( "Foo" , Foo( ) ) ;
foo( "Faz" , Faz( ) ) ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dXRpbGl0eT4KI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzLmhwcD4KCnN0cnVjdCBCYXIgeyB2aXJ0dWFsIH5CYXIoKSB7fSB9OwpzdHJ1Y3QgRm9vOiBCYXIge307CnN0cnVjdCBGYXoge307Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KdHlwZW5hbWUgYm9vc3Q6OmVuYWJsZV9pZjxib29zdDo6aXNfYmFzZV9vZjxCYXIsIFQ+Pjo6dHlwZQpmb28oY2hhciBjb25zdCogdHlwZSwgVCkgewogICAgc3RkOjpjb3V0IDw8IHR5cGUgPDwgIiBpcyBkZXJpdmVkIGZyb20gQmFyXG4iOwp9CnRlbXBsYXRlIDx0eXBlbmFtZSBUPgp0eXBlbmFtZSBib29zdDo6ZGlzYWJsZV9pZjxib29zdDo6aXNfYmFzZV9vZjxCYXIsIFQ+Pjo6dHlwZQoKZm9vKGNoYXIgY29uc3QqIHR5cGUsIFQpIHsKICAgIHN0ZDo6Y291dCA8PCB0eXBlIDw8ICIgaXMgTk9UIGRlcml2ZWQgZnJvbSBCYXJcbiI7Cn0KCmludCBtYWluKCkKewogICAgZm9vKCJGb28iLCBGb28oKSk7CiAgICBmb28oIkZheiIsIEZheigpKTsKfQ==
compilation info
prog.cpp:10: error: ‘enable_if’ in namespace ‘boost’ does not name a type
prog.cpp:10: error: expected unqualified-id before ‘<’ token
prog.cpp:15: error: ‘disable_if’ in namespace ‘boost’ does not name a type
prog.cpp:15: error: expected unqualified-id before ‘<’ token
prog.cpp: In function ‘int main()’:
prog.cpp:23: error: ‘foo’ was not declared in this scope
stdout