Я пытаюсь создать struct is_container для использования его в шаблоне SFINAE
template<typename T, typename = void>
struct is_container : std::false_type {};
template<typename T>
struct is_container<
T,
std::void_t<
typename T::value_type,
typename T::reference,
typename T::const_reference,
typename T::iterator,
typename T::const_iterator,
typename T::difference_type,
typename T::size_type,
decltype(std::declval<T>().begin()),
decltype(std::declval<T>().end()),
decltype(std::declval<T>().cbegin()),
decltype(std::declval<T>().cend()) ,
decltype(std::declval<T>().size()),
decltype(std::declval<T>().max_size()),
decltype(std::declval<T>().empty()),
decltype(std::declval<T>().swap()) //<------ problem here
>
> : public std::true_type {};
template<typename T>
inline constexpr bool is_container_v = is_container<T>::value;
моя проблема в том, что функция подкачки принимает параметр T &, поэтому static_assert (is_container_v >) не удалось. Есть ли у них способ использовать методы с параметрами в моем void_t?