outer_allocator.pass.cpp revision a2ccccce89dd50f1ef286a6ca1cdb86980e106f0
1e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton//===----------------------------------------------------------------------===//
2e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton//
3e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton//                     The LLVM Compiler Infrastructure
4e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton//
5e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton// This file is distributed under the University of Illinois Open Source
6e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton// License. See LICENSE.TXT for details.
7e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton//
8e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton//===----------------------------------------------------------------------===//
9e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton
10d891f9b872103235cfd2ed452c6f14a4394d9b3aDaniel Malea// <memory>
11d891f9b872103235cfd2ed452c6f14a4394d9b3aDaniel Malea
12e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton// template <class OuterAlloc, class... InnerAllocs>
13e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton//   class scoped_allocator_adaptor
14e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton
153600d497832c398ffafcba1935389125e15683a3Stephen Wilson// outer_allocator_type& outer_allocator();
163600d497832c398ffafcba1935389125e15683a3Stephen Wilson// const outer_allocator_type& outer_allocator() const;
173600d497832c398ffafcba1935389125e15683a3Stephen Wilson
18e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton#include <scoped_allocator>
19e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton#include <cassert>
20e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton
21e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton#include "../allocators.h"
2248a202dd3ac1fb4ee6709074448dc4d221fa020cGreg Clayton
23e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Claytonint main()
24e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton{
2549ce8969d3154e1560106cfe530444c09410f217Greg Clayton#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
263600d497832c398ffafcba1935389125e15683a3Stephen Wilson
27e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton    {
28e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton        typedef std::scoped_allocator_adaptor<A1<int>> A;
29e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton        A a(A1<int>(5));
303600d497832c398ffafcba1935389125e15683a3Stephen Wilson        assert(a.outer_allocator() == A1<int>(5));
31e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton    }
32e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton    {
33e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton        typedef std::scoped_allocator_adaptor<A1<int>, A2<int>> A;
34e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton        A a(A1<int>(5), A2<int>(6));
353600d497832c398ffafcba1935389125e15683a3Stephen Wilson        assert(a.outer_allocator() == A1<int>(5));
3648a202dd3ac1fb4ee6709074448dc4d221fa020cGreg Clayton    }
3748a202dd3ac1fb4ee6709074448dc4d221fa020cGreg Clayton    {
383600d497832c398ffafcba1935389125e15683a3Stephen Wilson        typedef std::scoped_allocator_adaptor<A1<int>, A2<int>, A3<int>> A;
39b1db658333cdebca31a128be95e926d80c3c7796Greg Clayton        A a(A1<int>(5), A2<int>(6), A3<int>(8));
403600d497832c398ffafcba1935389125e15683a3Stephen Wilson        assert(a.outer_allocator() == A1<int>(5));
41b1db658333cdebca31a128be95e926d80c3c7796Greg Clayton    }
42b1db658333cdebca31a128be95e926d80c3c7796Greg Clayton
43b1db658333cdebca31a128be95e926d80c3c7796Greg Clayton#endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
44b1db658333cdebca31a128be95e926d80c3c7796Greg Clayton}
45b170aee2daacc83e3d71c3e3acc9d56c89893a7bGreg Clayton