28#ifndef VC_TRAITS_IS_OUTPUT_ITERATOR_H_
29#define VC_TRAITS_IS_OUTPUT_ITERATOR_H_
33namespace Vc_VERSIONED_NAMESPACE
37namespace is_output_iterator_impl
39template <typename T, typename ValueType = typename std::iterator_traits<T>::value_type,
40 typename =
decltype(*std::declval<T &>() = std::declval<
45std::true_type test(
int);
46template <
typename T> std::false_type test(...);
50struct is_output_iterator
51 :
public std::conditional<
52 std::is_void<typename std::iterator_traits<T>::value_type>::value,
53 std::true_type, decltype(is_output_iterator_impl::test<T>(int()))>::type
57static_assert(!std::is_void<std::iterator_traits<int *>::value_type>::value,
"");
58static_assert(is_output_iterator<int *>::value,
"");
59static_assert(!is_output_iterator<const int *>::value,
"");