1cd1493b0829b48407887844921ef0e040c0f485alakedaemon//===----------------------------------------------------------------------===// 220c0082ee5bfeeecaa443c001a89934e9448ffa4Wouter van Oortmerssen// 320c0082ee5bfeeecaa443c001a89934e9448ffa4Wouter van Oortmerssen// The LLVM Compiler Infrastructure 420c0082ee5bfeeecaa443c001a89934e9448ffa4Wouter van Oortmerssen// 520c0082ee5bfeeecaa443c001a89934e9448ffa4Wouter van Oortmerssen// This file is dual licensed under the MIT and the University of Illinois Open 620c0082ee5bfeeecaa443c001a89934e9448ffa4Wouter van Oortmerssen// Source Licenses. See LICENSE.TXT for details. 720c0082ee5bfeeecaa443c001a89934e9448ffa4Wouter van Oortmerssen// 820c0082ee5bfeeecaa443c001a89934e9448ffa4Wouter van Oortmerssen//===----------------------------------------------------------------------===// 920c0082ee5bfeeecaa443c001a89934e9448ffa4Wouter van Oortmerssen 10f98870715a56875616b9a476a5fd21f05264b445Wouter van Oortmerssen// <tuple> 11f98870715a56875616b9a476a5fd21f05264b445Wouter van Oortmerssen 12f98870715a56875616b9a476a5fd21f05264b445Wouter van Oortmerssen// template <class... Types> class tuple; 13f98870715a56875616b9a476a5fd21f05264b445Wouter van Oortmerssen 14f98870715a56875616b9a476a5fd21f05264b445Wouter van Oortmerssen// template <class Alloc, class ...UTypes> 15f98870715a56875616b9a476a5fd21f05264b445Wouter van Oortmerssen// tuple(allocator_arg_t, const Alloc& a, tuple<UTypes...> const&); 16f98870715a56875616b9a476a5fd21f05264b445Wouter van Oortmerssen 1720c0082ee5bfeeecaa443c001a89934e9448ffa4Wouter van Oortmerssen// UNSUPPORTED: c++98, c++03 1820c0082ee5bfeeecaa443c001a89934e9448ffa4Wouter van Oortmerssen 1920c0082ee5bfeeecaa443c001a89934e9448ffa4Wouter van Oortmerssen#include <tuple> 2020c0082ee5bfeeecaa443c001a89934e9448ffa4Wouter van Oortmerssen#include <memory> 2120c0082ee5bfeeecaa443c001a89934e9448ffa4Wouter van Oortmerssen 2220c0082ee5bfeeecaa443c001a89934e9448ffa4Wouter van Oortmerssenstruct ExplicitCopy { 2320c0082ee5bfeeecaa443c001a89934e9448ffa4Wouter van Oortmerssen explicit ExplicitCopy(int) {} 2420c0082ee5bfeeecaa443c001a89934e9448ffa4Wouter van Oortmerssen explicit ExplicitCopy(ExplicitCopy const&) {} 2520c0082ee5bfeeecaa443c001a89934e9448ffa4Wouter van Oortmerssen 2620c0082ee5bfeeecaa443c001a89934e9448ffa4Wouter van Oortmerssen}; 2720c0082ee5bfeeecaa443c001a89934e9448ffa4Wouter van Oortmerssen 2820c0082ee5bfeeecaa443c001a89934e9448ffa4Wouter van Oortmerssenstd::tuple<ExplicitCopy> const_explicit_copy_test() { 2920c0082ee5bfeeecaa443c001a89934e9448ffa4Wouter van Oortmerssen const std::tuple<int> t1(42); 3020c0082ee5bfeeecaa443c001a89934e9448ffa4Wouter van Oortmerssen return {std::allocator_arg, std::allocator<void>{}, t1}; 3120c0082ee5bfeeecaa443c001a89934e9448ffa4Wouter van Oortmerssen // expected-error@-1 {{chosen constructor is explicit in copy-initialization}} 3220c0082ee5bfeeecaa443c001a89934e9448ffa4Wouter van Oortmerssen} 3320c0082ee5bfeeecaa443c001a89934e9448ffa4Wouter van Oortmerssen 3420c0082ee5bfeeecaa443c001a89934e9448ffa4Wouter van Oortmerssenstd::tuple<ExplicitCopy> non_const_explicit_copy_test() { 35 std::tuple<int> t1(42); 36 return {std::allocator_arg, std::allocator<void>{}, t1}; 37 // expected-error@-1 {{chosen constructor is explicit in copy-initialization}} 38} 39 40int main() 41{ 42 43} 44