// (C) Copyright John Maddock 2001. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org/libs/config for most recent version. // MACRO: BOOST_HAS_PARTIAL_STD_ALLOCATOR // TITLE: limited std::allocator support // DESCRIPTION: The std lib has at least some kind of stanfard allocator // with allocate/deallocate members and probably not much more. #include namespace boost_has_partial_std_allocator{ // // test everything except rebind template members: // template int test_allocator(const T& i) { typedef std::allocator alloc1_t; typedef typename alloc1_t::size_type size_type; typedef typename alloc1_t::difference_type difference_type; typedef typename alloc1_t::pointer pointer; typedef typename alloc1_t::const_pointer const_pointer; typedef typename alloc1_t::reference reference; typedef typename alloc1_t::const_reference const_reference; typedef typename alloc1_t::value_type value_type; alloc1_t a1; pointer p = a1.allocate(1); const_pointer cp = p; a1.construct(p,i); size_type s = a1.max_size(); (void)s; reference r = *p; const_reference cr = *cp; if(p != a1.address(r)) return -1; if(cp != a1.address(cr)) return -1; a1.destroy(p); a1.deallocate(p,1); return 0; } int test() { return test_allocator(0); } }