#ifndef BASE_TEMPLATE_UTIL_H_
#define BASE_TEMPLATE_UTIL_H_
#include <iosfwd>
#include <iterator>
#include <type_traits>
#include <utility>
namespace base {
namespace internal {
template <typename T, typename = void>
struct SupportsOstreamOperator : std::false_type {};
template <typename T>
struct SupportsOstreamOperator<T,
decltype(void(std::declval<std::ostream&>()
<< std::declval<T>()))>
: std::true_type {};
template <typename T, typename = void>
struct is_iterator : std::false_type {};
template <typename T>
struct is_iterator<
T,
std::void_t<typename std::iterator_traits<T>::iterator_category>>
: std::true_type {};
}
}
#endif