#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(std::declval<int&>() = std::declval<T>().getCount())
  >> : std::true_type {};

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

struct TestFalse
{
};

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