#include <iostream>
#include <type_traits>
 
namespace A { class Foo {}; }
namespace B { class Foo {}; class Bar {}; }
namespace C { class Foo {}; }
 
template<typename T>
struct is_Foo: public std::integral_constant<bool,
    std::is_same<T, A::Foo>::value || std::is_same<T, B::Foo>::value || 
    std::is_same<T, C::Foo>::value> {};
 
int main() {
 std::cout << is_Foo<A::Foo>::value << ' ' << is_Foo<B::Foo>::value << ' ' 
           << is_Foo<C::Foo>::value << ' ' << is_Foo<B::Bar>::value 
           << std::endl;
 
 return (0);
}