, typename foo::bar int, , SFINAE.
, , T::bar, . , std::experimental::is_detected. , , *:
template<typename, template <typename> class, typename = void>
struct is_detected : false_type {};
template<typename T, template <typename> class Op>
struct is_detected<T, Op, void_t<Op<T>>> : true_type {};
, :
template <typename T> using bar_t = typename T::bar;
:
is_detected <foo, bar_t>::value
*: , , . , variadic . std::experimental::is_detected, .