alloc_convert_copy.pass.cpp revision bc8d3f97eb5c958007f2713238472e0c1c8fe02c
15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)//===----------------------------------------------------------------------===//
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)//
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// ��������������������The LLVM Compiler Infrastructure
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)//
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// This file is distributed under the University of Illinois Open Source
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// License. See LICENSE.TXT for details.
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)//
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)//===----------------------------------------------------------------------===//
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// <tuple>
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// template <class... Types> class tuple;
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// template <class Alloc, class... UTypes>
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)//   tuple(allocator_arg_t, const Alloc& a, const tuple<UTypes...>&);
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include <tuple>
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include <cassert>
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "../allocators.h"
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "../alloc_first.h"
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "../alloc_last.h"
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)int main()
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        typedef std::tuple<double> T0;
2853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        typedef std::tuple<int> T1;
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        T0 t0(2.5);
3053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        T1 t1(std::allocator_arg, A1<int>(), t0);
3153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        assert(std::get<0>(t1) == 2);
3253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    }
3353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    {
3453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        typedef std::tuple<int> T0;
3553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        typedef std::tuple<alloc_first> T1;
365267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        T0 t0(2);
3753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        alloc_first::allocator_constructed = false;
381e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        T1 t1(std::allocator_arg, A1<int>(5), t0);
391e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        assert(alloc_first::allocator_constructed);
4053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        assert(std::get<0>(t1) == 2);
4153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    }
4251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    {
4309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        typedef std::tuple<int, int> T0;
4453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        typedef std::tuple<alloc_first, alloc_last> T1;
4553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        T0 t0(2, 3);
4653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        alloc_first::allocator_constructed = false;
4753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        alloc_last::allocator_constructed = false;
4853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        T1 t1(std::allocator_arg, A1<int>(5), t0);
4953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        assert(alloc_first::allocator_constructed);
5053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        assert(alloc_last::allocator_constructed);
515267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        assert(std::get<0>(t1) == 2);
521e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        assert(std::get<1>(t1) == 3);
5353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    }
545267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    {
5553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        typedef std::tuple<double, int, int> T0;
5653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        typedef std::tuple<int, alloc_first, alloc_last> T1;
575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        T0 t0(1.5, 2, 3);
58c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        alloc_first::allocator_constructed = false;
595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        alloc_last::allocator_constructed = false;
60c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        T1 t1(std::allocator_arg, A1<int>(5), t0);
61c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        assert(alloc_first::allocator_constructed);
62c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        assert(alloc_last::allocator_constructed);
63c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        assert(std::get<0>(t1) == 1);
64c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        assert(std::get<1>(t1) == 2);
65c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        assert(std::get<2>(t1) == 3);
66c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    }
67c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)}
68c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)