#include <iostream>

template<typename T>
struct to_void
{
	typedef void type;
};

class Foo
{
	typedef int TD;
};

template <typename T, typename dummy = void>
struct has_TD : std::false_type {};

template <typename T>
struct has_TD<T, typename to_void<typename T::TD>::type > : std::true_type{};

int main()
{
	std::cout << std::boolalpha << has_TD<Foo>::value << std::endl;
}