template <typename T>
struct is_op_ptr {
private:
template <class AT>
static constexpr std::false_type is_it_a_ptr(...); // note the false_type return
template <class AT>
static constexpr typename ::std::enable_if<
::std::is_same<
AT,
typename operation<typename AT::element_type::result_type>::ptr_t>::value,
std::true_type>::type // note the true_type return
is_it_a_ptr(int); // no definition needed
public:
// do everything unevaluated
static constexpr bool value = decltype(is_it_a_ptr<T> /* you can just pass T explicitly */ (0))::value;
};
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnN0cnVjdCBpc19vcF9wdHIgewogcHJpdmF0ZToKICAgdGVtcGxhdGUgPGNsYXNzIEFUPgogICBzdGF0aWMgY29uc3RleHByIHN0ZDo6ZmFsc2VfdHlwZSBpc19pdF9hX3B0ciguLi4pOyAvLyBub3RlIHRoZSBmYWxzZV90eXBlIHJldHVybgogICB0ZW1wbGF0ZSA8Y2xhc3MgQVQ+CiAgIHN0YXRpYyBjb25zdGV4cHIgdHlwZW5hbWUgOjpzdGQ6OmVuYWJsZV9pZjwKICAgICAgOjpzdGQ6OmlzX3NhbWU8CiAgICAgICAgIEFULAogICAgICAgICB0eXBlbmFtZSBvcGVyYXRpb248dHlwZW5hbWUgQVQ6OmVsZW1lbnRfdHlwZTo6cmVzdWx0X3R5cGU+OjpwdHJfdD46OnZhbHVlLAogICAgICBzdGQ6OnRydWVfdHlwZT46OnR5cGUgIC8vIG5vdGUgdGhlIHRydWVfdHlwZSByZXR1cm4KICAgaXNfaXRfYV9wdHIoaW50KTsgLy8gbm8gZGVmaW5pdGlvbiBuZWVkZWQKCiBwdWJsaWM6CiAgIC8vIGRvIGV2ZXJ5dGhpbmcgdW5ldmFsdWF0ZWQKICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlID0gZGVjbHR5cGUoaXNfaXRfYV9wdHI8VD4gLyogeW91IGNhbiBqdXN0IHBhc3MgVCBleHBsaWNpdGx5ICovICgwKSk6OnZhbHVlOwp9Owo=