123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- /*
- 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 <boost/core/noinit_adaptor.hpp>
- #include <boost/core/default_allocator.hpp>
- #include <boost/core/lightweight_test.hpp>
- #include <vector>
- template<class T>
- class creator
- : public boost::default_allocator<T> {
- public:
- template<class U>
- struct rebind {
- typedef creator<U> other;
- };
- creator(int state)
- : state_(state) { }
- template<class U>
- creator(const creator<U>& other)
- : state_(other.state()) { }
- template<class U, class V>
- void construct(U*, const V&) {
- BOOST_ERROR("construct");
- }
- template<class U>
- void destroy(U*) {
- BOOST_ERROR("destroy");
- }
- int state() const {
- return state_;
- }
- private:
- int state_;
- };
- template<class T, class U>
- inline bool
- operator==(const creator<T>& lhs, const creator<U>& rhs)
- {
- return lhs.state() == rhs.state();
- }
- template<class T, class U>
- inline bool
- operator!=(const creator<T>& lhs, const creator<U>& 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<class A>
- void test(const A& allocator)
- {
- std::vector<typename A::value_type, A> 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<creator<int> >(1));
- test(boost::noinit_adaptor<creator<type> >(2));
- test(boost::noinit_adapt(creator<int>(3)));
- test(boost::noinit_adapt(creator<type>(4)));
- return boost::report_errors();
- }
|