比较范围构造函数中的迭代器value_type

时间:2015-04-24 20:07:07

标签: c++ c++11 typetraits

我正在为自定义容器编写范围cosntructor:

MyContainer(const InputIterator& first, 
            const InputIterator& last, 
            const allocator_type& alloc = allocator_type())

并希望检查InputIterator::value_type是否与容器的value_type兼容。我最初尝试过尝试过:

static_assert(!(std::is_convertible<InputIterator::value_type, value_type>::value ||
        std::is_same<InputIterator::value_type, value_type>::value), "error");

然后走了:

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");

但它始终断言,即使我使用MyContainer::iterator作为输入迭代器。

如何检查InputIterator是否兼容?

1 个答案:

答案 0 :(得分:1)

我猜你可能想要std::is_constructible

static_assert(std::is_constructible<
    value_type,
    decltype(*first)
    >::value, "error");

或者,std::is_assignable,取决于您是从输入迭代器构造还是分配。