1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- /*
- Copyright 2018 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/align/aligned_allocator_adaptor.hpp>
- template<class T>
- class A {
- public:
- typedef T value_type;
- typedef T* pointer;
- typedef std::size_t size_type;
- typedef std::ptrdiff_t difference_type;
- template<class U>
- struct rebind {
- typedef A<U> other;
- };
- A(int state)
- : state_(state) { }
- template<class U>
- A(const A<U>& other)
- : state_(other.state()) { }
- T* allocate(std::size_t size, const void* = 0) {
- return static_cast<T*>(::operator new(sizeof(T) * size));
- }
- void deallocate(T* ptr, std::size_t) {
- ::operator delete(ptr);
- }
- int state() const {
- return state_;
- }
- private:
- int state_;
- };
- template<class T, class U>
- inline bool
- operator==(const A<T>& a, const A<U>& b)
- {
- return a.state() == b.state();
- }
- template<class T, class U>
- inline bool
- operator!=(const A<T>& a, const A<U>& b)
- {
- return !(a == b);
- }
- struct S;
- struct V { };
- void value_test()
- {
- boost::alignment::aligned_allocator_adaptor<A<S> > a(A<S>(1));
- (void)a;
- }
- void rebind_test()
- {
- boost::alignment::aligned_allocator_adaptor<A<V> > a(A<V>(1));
- boost::alignment::aligned_allocator_adaptor<A<V> >::rebind<S>::other r(a);
- (void)r;
- }
|