Generic Type Trait example
Edit: Only after posting did I see that the question was tagged c++14. This code relies on std::void_t from c++17 which is trivial to implement in c++14.

You can extract some of the functionality to a reusable detect type-trait that only needs to be supplied a type alias to work.

namespace detail {

template &lt;template &lt;class...&gt; class CheckTemplate, class = void, class... Object&gt;
struct detect_impl : std::false_type {};

template &lt;template &lt;class...&gt; class CheckTemplate, class... Object&gt;
struct detect_impl&lt;CheckTemplate, std::void_t&lt;CheckTemplate&lt;Object...&gt;&gt;, Object...&gt; : std::true_type {};
}  // namespace detail

template &lt;template &lt;class...&gt; class CheckTemplate, class... Object&gt;
constexpr bool detect_v = detail::detect_impl&lt;CheckTemplate, void, Object...&gt;{};


With that in place all we need is to use it as such.

template &lt;class T&gt;
using is_valid = decltype(std::declval&lt;T&gt;().method1(0, 0, 0));

template &lt;typename T&gt;
constexpr bool is_valid_v = detect_v&lt;is_valid, T&gt;;

static_assert(is_valid_v&lt;ValidType&lt;int&gt;&gt;)


The Object pack let's us make a more flexible is_valid that takes the argument types as parameters if we want.

template &lt;class T, class... Args&gt;
using is_valid_flex = decltype(std::declval&lt;T&gt;().method1(std::declval&lt;Args&gt;()...));

template &lt;class... Args&gt;
constexpr bool is_valid_flex_v = detect_v&lt;is_valid, Args...&gt;;

static_assert(is_valid_flex_v&lt;ValidType&lt;int&gt;, int, int int&gt;);


Additional modification is possible if we want to involve the return-type of the method.