#include <iostream>
#include <type_traits>
using namespace std;

template<typename... > struct Voider { using Type = void; };
template<typename... TArgs> using VoidT = typename Voider<TArgs...>::Type;

template< class, class = void >
struct hasGetCount : false_type { };
     
template< class T >
struct hasGetCount<T, VoidT<decltype(T::getCount)>> 
: std::is_same<decltype(std::declval<T>().getCount()), int>::type { };


struct TestTrue
{
    int getCount() { return 0; }	
};

struct TestFalse
{

};

int main() 
{
	static_assert(hasGetCount<TestTrue>::value == true, "");
	static_assert(hasGetCount<TestFalse>::value == false, ""); 
	
	return 0;
}