1b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//===----------------------------------------------------------------------===// 2b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// 3b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// The LLVM Compiler Infrastructure 4b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// 5b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// This file is dual licensed under the MIT and the University of Illinois Open 6b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// Source Licenses. See LICENSE.TXT for details. 7b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// 8b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//===----------------------------------------------------------------------===// 9b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 10b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// <tuple> 11b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 12b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// template <class... Types> class tuple; 13b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 14b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// template <class... UTypes> 15b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// explicit tuple(UTypes&&... u); 16b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 17b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner/* 18b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner This is testing an extension whereby only Types having an explicit conversion 19b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner from UTypes are bound by the explicit tuple constructor. 20b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner*/ 21b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 22b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#include <tuple> 23b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#include <cassert> 24b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 25b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnerclass MoveOnly 26b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner{ 27b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner MoveOnly(const MoveOnly&); 28b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner MoveOnly& operator=(const MoveOnly&); 29b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 30b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner int data_; 31b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnerpublic: 32b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner explicit MoveOnly(int data = 1) : data_(data) {} 33b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner MoveOnly(MoveOnly&& x) 34b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner : data_(x.data_) {x.data_ = 0;} 35b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner MoveOnly& operator=(MoveOnly&& x) 36b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner {data_ = x.data_; x.data_ = 0; return *this;} 37b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 38b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner int get() const {return data_;} 39b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 40b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner bool operator==(const MoveOnly& x) const {return data_ == x.data_;} 41b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner bool operator< (const MoveOnly& x) const {return data_ < x.data_;} 42b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner}; 43b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 44b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnerint main() 45b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner{ 46b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner { 47b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner std::tuple<MoveOnly> t = 1; 48b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner } 49b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner} 50