allocate_size.pass.cpp revision b64f8b07c104c6cc986570ac8ee0ed16a9f23976
1b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien//===----------------------------------------------------------------------===//
2b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien//
3b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien//                     The LLVM Compiler Infrastructure
4b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien//
5b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien// This file is dual licensed under the MIT and the University of Illinois Open
6b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien// Source Licenses. See LICENSE.TXT for details.
7b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien//
8b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien//===----------------------------------------------------------------------===//
9b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien
10b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien// <memory>
11b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien
12b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien// template <class OuterAlloc, class... InnerAllocs>
13b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien//   class scoped_allocator_adaptor
14b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien
15b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien// pointer allocate(size_type n);
16b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien
17b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien#include <scoped_allocator>
18b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien#include <cassert>
19b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien
20b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien#include "../allocators.h"
21b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien
22b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembienint main()
23b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien{
24b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
25b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien
26b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien    {
27b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien        typedef std::scoped_allocator_adaptor<A1<int>> A;
28b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien        A a;
29b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien        A1<int>::allocate_called = false;
30b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien        assert(a.allocate(10) == (int*)10);
31b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien        assert(A1<int>::allocate_called == true);
32b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien    }
33b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien    {
34b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien        typedef std::scoped_allocator_adaptor<A1<int>, A2<int>> A;
35b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien        A a;
36b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien        A1<int>::allocate_called = false;
37b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien        assert(a.allocate(10) == (int*)10);
38b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien        assert(A1<int>::allocate_called == true);
39b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien    }
40b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien    {
41b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien        typedef std::scoped_allocator_adaptor<A1<int>, A2<int>, A3<int>> A;
42b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien        A a;
43b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien        A1<int>::allocate_called = false;
44b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien        assert(a.allocate(10) == (int*)10);
45b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien        assert(A1<int>::allocate_called == true);
46b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien    }
47b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien
48b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien#endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
49b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien}
50b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien