diff --git a/include/boost/circular_buffer/base.hpp b/include/boost/circular_buffer/base.hpp index 000b865..931f834 100644 --- a/include/boost/circular_buffer/base.hpp +++ b/include/boost/circular_buffer/base.hpp @@ -507,8 +507,7 @@ public: InputIterator last, const allocator_type& alloc = allocator_type()) : m_alloc(alloc) { - BOOST_CB_IS_CONVERTIBLE(InputIterator, value_type); // check for invalid iterator type - initialize(capacity, first, last, BOOST_DEDUCED_TYPENAME BOOST_ITERATOR_CATEGORY::type()); + initialize(capacity, first, last, BOOST_DEDUCED_TYPENAME cb_details::iterator_cat_traits::tag()); } //! Destructor. @@ -1167,6 +1166,21 @@ private: initialize(distance, first, last, distance); } + //! Specialized initialize method. + template + void initialize(size_type capacity, IntegralType n, IntegralType item, cb_details::int_tag) { + BOOST_CB_ASSERT(capacity >= static_cast(n)); // check for capacity lower than n + m_size = static_cast(n); + initialize(capacity, item); + } + + //! Specialized initialize method. + template + void initialize(size_type capacity, Iterator first, Iterator last, cb_details::iterator_tag) { + BOOST_CB_IS_CONVERTIBLE(Iterator, value_type); // check for invalid iterator type + initialize(capacity, first, last, BOOST_DEDUCED_TYPENAME BOOST_ITERATOR_CATEGORY::type()); + } + //! Specialized initialize method. template void initialize(size_type capacity, @@ -1268,7 +1282,7 @@ private: //! Specialized assign method. template void assign(size_type capacity, IntegralType n, IntegralType item, cb_details::int_tag) { - assign(capacity, static_cast(n), item); + // TODO assign(capacity, static_cast(n), item); } //! Specialized assign method. @@ -1281,7 +1295,7 @@ private: //! Specialized assign method. template void assign(size_type capacity, InputIterator first, InputIterator last, std::input_iterator_tag) { - BOOST_CB_ASSERT_TEMPLATED_ITERATOR_CONSTRUCTORS; // check if the STL provides templated iterator constructors for containers + BOOST_CB_ASSERT_TEMPLATED_ITERATOR_CONSTRUCTORS // check if the STL provides templated iterator constructors for containers std::deque tmp(first, last); size_type distance = tmp.size(); BOOST_DEDUCED_TYPENAME std::deque::iterator begin = tmp.begin();