template <typename T>
using is_associative = typename detail::is_associative_impl<T>::type;
- template<typename T, typename Enable = void>
- struct is_reservable : mpl::false_ {};
-
- template<typename T>
- struct is_reservable<T, decltype(std::declval<T&>().reserve(0))>
- : mpl::true_ {};
-
///////////////////////////////////////////////////////////////////////////
namespace detail
{
struct append_container
{
private:
- template <typename Iterator>
- static void reserve(Container& /* c */, Iterator /* first */, Iterator /* last */, mpl::false_)
- {
- // Not all containers have "reserve"
- }
-
- template <typename Iterator>
- static void reserve(Container& c, Iterator first, Iterator last, mpl::true_)
- {
- c.reserve(c.size() + std::distance(first, last));
- }
-
template <typename Iterator>
static void insert(Container& c, Iterator first, Iterator last, mpl::false_)
{
template <typename Iterator>
static bool call(Container& c, Iterator first, Iterator last)
{
- reserve(c, first, last, is_reservable<Container>{});
insert(c, first, last, is_associative<Container>{});
return true;
}