/* Copyright 2019 Glen Joseph Fernandes (glenjofe@gmail.com) Distributed under the Boost Software License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt) */ #include #include #include #include template class creator : public boost::default_allocator { public: template struct rebind { typedef creator other; }; creator(int state) : state_(state) { } template creator(const creator& other) : state_(other.state()) { } template void construct(U*, const V&) { BOOST_ERROR("construct"); } template void destroy(U*) { BOOST_ERROR("destroy"); } int state() const { return state_; } private: int state_; }; template inline bool operator==(const creator& lhs, const creator& rhs) { return lhs.state() == rhs.state(); } template inline bool operator!=(const creator& lhs, const creator& rhs) { return !(lhs == rhs); } class type { public: type() { } type(int value) : value_(value) { } int value() const { return value_; } private: int value_; }; inline bool operator==(const type& lhs, const type& rhs) { return lhs.value() == rhs.value(); } template void test(const A& allocator) { std::vector v(allocator); v.push_back(1); BOOST_TEST(v.front() == 1); v.clear(); v.resize(5); v.front() = 1; } int main() { test(boost::noinit_adaptor >(1)); test(boost::noinit_adaptor >(2)); test(boost::noinit_adapt(creator(3))); test(boost::noinit_adapt(creator(4))); return boost::report_errors(); }