Add compile-time check for input iterators in ::wire array writing

This commit is contained in:
Lee *!* Clagett 2023-11-06 16:26:39 -05:00
parent ac02af9286
commit 085fdea88c

View file

@ -30,6 +30,7 @@
#include <boost/utility/string_ref.hpp>
#include <boost/range/size.hpp>
#include <cstdint>
#include <iterator>
#include <system_error>
#include <type_traits>
@ -188,7 +189,13 @@ namespace wire_write
template<typename T>
inline std::size_t array_size(std::true_type, const T& source)
{ return boost::size(source); }
{
static_assert(
!std::is_same<typename std::iterator_traits<typename T::const_iterator>::iterator_category, std::input_iterator_tag>{},
"Input iterators must use json (or similar) derived classes directly"
);
return boost::size(source);
}
template<typename T>
inline constexpr std::size_t array_size(std::false_type, const T&) noexcept