alloc.pass.cpp revision bc8d3f97eb5c958007f2713238472e0c1c8fe02c
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)//===----------------------------------------------------------------------===//
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)//
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// ��������������������The LLVM Compiler Infrastructure
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)//
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This file is distributed under the University of Illinois Open Source
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// License. See LICENSE.TXT for details.
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)//
8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)//===----------------------------------------------------------------------===//
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// <tuple>
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// template <class... Types> class tuple;
13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// template <class Alloc>
1503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)//   tuple(allocator_arg_t, const Alloc& a);
1603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <tuple>
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <cassert>
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "../DefaultOnly.h"
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "../allocators.h"
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "../alloc_first.h"
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "../alloc_last.h"
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int main()
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    {
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        std::tuple<> t(std::allocator_arg, A1<int>());
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    {
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        std::tuple<int> t(std::allocator_arg, A1<int>());
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        assert(std::get<0>(t) == 0);
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    {
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        std::tuple<DefaultOnly> t(std::allocator_arg, A1<int>());
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        assert(std::get<0>(t) == DefaultOnly());
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    {
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        assert(!alloc_first::allocator_constructed);
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        std::tuple<alloc_first> t(std::allocator_arg, A1<int>(5));
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        assert(alloc_first::allocator_constructed);
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        assert(std::get<0>(t) == alloc_first());
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    {
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        assert(!alloc_last::allocator_constructed);
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        std::tuple<alloc_last> t(std::allocator_arg, A1<int>(5));
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        assert(alloc_last::allocator_constructed);
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        assert(std::get<0>(t) == alloc_last());
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    {
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        alloc_first::allocator_constructed = false;
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        std::tuple<DefaultOnly, alloc_first> t(std::allocator_arg, A1<int>(5));
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        assert(std::get<0>(t) == DefaultOnly());
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        assert(alloc_first::allocator_constructed);
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        assert(std::get<1>(t) == alloc_first());
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    {
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        alloc_first::allocator_constructed = false;
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        alloc_last::allocator_constructed = false;
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        std::tuple<DefaultOnly, alloc_first, alloc_last> t(std::allocator_arg,
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                                           A1<int>(5));
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        assert(std::get<0>(t) == DefaultOnly());
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        assert(alloc_first::allocator_constructed);
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        assert(std::get<1>(t) == alloc_first());
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        assert(alloc_last::allocator_constructed);
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        assert(std::get<2>(t) == alloc_last());
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    {
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        alloc_first::allocator_constructed = false;
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        alloc_last::allocator_constructed = false;
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        std::tuple<DefaultOnly, alloc_first, alloc_last> t(std::allocator_arg,
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                                           A2<int>(5));
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        assert(std::get<0>(t) == DefaultOnly());
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        assert(!alloc_first::allocator_constructed);
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        assert(std::get<1>(t) == alloc_first());
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        assert(!alloc_last::allocator_constructed);
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        assert(std::get<2>(t) == alloc_last());
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)