#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, "");
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZV90cmFpdHM+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0ZW1wbGF0ZTx0eXBlbmFtZS4uLiA+IHN0cnVjdCBWb2lkZXIgeyB1c2luZyBUeXBlID0gdm9pZDsgfTsKdGVtcGxhdGU8dHlwZW5hbWUuLi4gVEFyZ3M+IHVzaW5nIFZvaWRUID0gdHlwZW5hbWUgVm9pZGVyPFRBcmdzLi4uPjo6VHlwZTsKCnRlbXBsYXRlPCBjbGFzcywgY2xhc3MgPSB2b2lkID4Kc3RydWN0IGhhc0dldENvdW50IDogZmFsc2VfdHlwZSB7IH07CiAgICAgCnRlbXBsYXRlPCBjbGFzcyBUID4Kc3RydWN0IGhhc0dldENvdW50PFQsCiAgVm9pZFQ8CiAgICBkZWNsdHlwZShzdGQ6OmRlY2x2YWw8aW50Jj4oKSA9IHN0ZDo6ZGVjbHZhbDxUPigpLmdldENvdW50KCkpCiAgPj4gOiBzdGQ6OnRydWVfdHlwZSB7fTsKCnN0cnVjdCBUZXN0VHJ1ZQp7CiAgICBpbnQgZ2V0Q291bnQoKSB7IHJldHVybiAwOyB9CQp9OwoKc3RydWN0IFRlc3RGYWxzZQp7Cn07CgppbnQgbWFpbigpIAp7CglzdGF0aWNfYXNzZXJ0KGhhc0dldENvdW50PFRlc3RUcnVlPjo6dmFsdWUgPT0gdHJ1ZSwgIiIpOwoJc3RhdGljX2Fzc2VydChoYXNHZXRDb3VudDxUZXN0RmFsc2U+Ojp2YWx1ZSA9PSBmYWxzZSwgIiIpOyAKfQ==