#include <iostream>
#include <boost/utility.hpp>
#include <boost/type_traits.hpp>
struct BarBase {};
struct Bar: BarBase {};
struct FooBase {};
struct Foo: FooBase {};
template <typename T>
struct Task
{
void doIt();
};
template <typename T>
void Task<T>::doIt()
{
std::cout << "Generic doIt()" << std::endl;
}
template <>
void Task<Foo>::doIt()
{
std::cout << "doIt() for Foo" << std::endl;
}
int main()
{
Task<Foo> f;
f.doIt();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Ym9vc3QvdXRpbGl0eS5ocHA+CiNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy5ocHA+CgpzdHJ1Y3QgQmFyQmFzZSB7fTsKc3RydWN0IEJhcjogQmFyQmFzZSB7fTsKCnN0cnVjdCBGb29CYXNlIHt9OwpzdHJ1Y3QgRm9vOiBGb29CYXNlIHt9OwoKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgpzdHJ1Y3QgVGFzawp7Cgl2b2lkIGRvSXQoKTsKfTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgp2b2lkIFRhc2s8VD46OmRvSXQoKQp7CglzdGQ6OmNvdXQgPDwgIkdlbmVyaWMgZG9JdCgpIiA8PCBzdGQ6OmVuZGw7Cn0KCnRlbXBsYXRlIDw+CnZvaWQgVGFzazxGb28+Ojpkb0l0KCkKewoJc3RkOjpjb3V0IDw8ICJkb0l0KCkgZm9yIEZvbyIgPDwgc3RkOjplbmRsOwp9CgoKaW50IG1haW4oKQp7CglUYXNrPEZvbz4gZjsKCWYuZG9JdCgpOwp9