V(1, 2),
            V(1, 3),
            V(2, 1),
            V(2, 2),
            V(2, 3),
            V(3, 1),
            V(3, 2),
            V(3, 3)
        };
        M m2(I(a2), I(a2+sizeof(a2)/sizeof(a2[0])), C(5), A(7));
        M m3(std::move(m1), A(7));
        REQUIRE(m3 == m2);
        REQUIRE(m3.get_allocator() == A(7));
        REQUIRE(m3.key_comp() == C(5));
#ifndef ALLOWED_NON_EMPTY_AFTER_MOVE
        REQUIRE(m1.empty());
#endif
    }
    {
        typedef std::pair<MoveOnly, MoveOnly> V;
        typedef std::pair<const MoveOnly, MoveOnly> VC;
        typedef test_compare<std::less<MoveOnly> > C;
        typedef test_allocator<VC> A;
        typedef contiguous::map<MoveOnly, MoveOnly, C, A> M;
        typedef std::move_iterator<V*> I;
        V a1[] =
        {
            V(1, 1),
            V(1, 2),
            V(1, 3),
            V(2, 1),
// bool empty() const;

#include "defs.h"

#include "contiguous/map.h"
#include "catch.hpp"

#include "min_allocator.h"

TEST_CASE("map access empty pass")
{
    {
    typedef contiguous::map<int, double> M;
    M m;
    REQUIRE(m.empty());
    m.insert(M::value_type(1, 1.5));
    REQUIRE(!m.empty());
    m.clear();
    REQUIRE(m.empty());
    }
#if TEST_STD_VER >= 11
    {
    typedef contiguous::map<int, double, std::less<int>, min_allocator<std::pair<const int, double>>> M;
    M m;
    REQUIRE(m.empty());
    m.insert(M::value_type(1, 1.5));
    REQUIRE(!m.empty());
    m.clear();
    REQUIRE(m.empty());
    }