c++ - Comparing iterator value_type in range constructor -
i'm writing range cosntructor custom container:
mycontainer(const inputiterator& first, const inputiterator& last, const allocator_type& alloc = allocator_type()) and check the inputiterator::value_type compatible container's value_type. tried tried:
static_assert(!(std::is_convertible<inputiterator::value_type, value_type>::value || std::is_same<inputiterator::value_type, value_type>::value), "error"); and went far as:
using inputiteratortype = typename std::decay<inputiterator>::type; using inputvaluetype = typename std::decay<inputiteratortype::value_type>::type; static_assert(!(std::is_convertible<inputvaluetype, value_type>::value || std::is_same<inputvaluetype, value_type>::value), "error"); but asserts, when use mycontainer::iterator input iterator.
how can check inputiterator compatible?
i'm guessing want std::is_constructible:
static_assert(std::is_constructible< value_type, decltype(*first) >::value, "error"); or, alternatively, std::is_assignable, depending on whether you're constructing or assigning input iterators.
Comments
Post a Comment