deallocate.pass.cpp revision b64f8b07c104c6cc986570ac8ee0ed16a9f23976
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===//
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//                     The LLVM Compiler Infrastructure
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file is dual licensed under the MIT and the University of Illinois Open
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Source Licenses. See LICENSE.TXT for details.
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===//
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// <memory>
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// template <class OuterAlloc, class... InnerAllocs>
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//   class scoped_allocator_adaptor
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// void deallocate(pointer p, size_type n);
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include <scoped_allocator>
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <cassert>
195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "../allocators.h"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int main()
23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles){
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        typedef std::scoped_allocator_adaptor<A1<int>> A;
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        A a;
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        a.deallocate((int*)10, 20);
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert((A1<int>::deallocate_called == std::pair<int*, std::size_t>((int*)10, 20)));
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    {
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        typedef std::scoped_allocator_adaptor<A1<int>, A2<int>> A;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        A a;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        a.deallocate((int*)10, 20);
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert((A1<int>::deallocate_called == std::pair<int*, std::size_t>((int*)10, 20)));
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        typedef std::scoped_allocator_adaptor<A1<int>, A2<int>, A3<int>> A;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        A a;
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        a.deallocate((int*)10, 20);
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert((A1<int>::deallocate_called == std::pair<int*, std::size_t>((int*)10, 20)));
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
4668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}
4768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)