1*dc71a77dSLouis Dionne //===----------------------------------------------------------------------===// 2*dc71a77dSLouis Dionne // 3*dc71a77dSLouis Dionne // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*dc71a77dSLouis Dionne // See https://llvm.org/LICENSE.txt for license information. 5*dc71a77dSLouis Dionne // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*dc71a77dSLouis Dionne // 7*dc71a77dSLouis Dionne //===----------------------------------------------------------------------===// 8*dc71a77dSLouis Dionne 9*dc71a77dSLouis Dionne // <tuple> 10*dc71a77dSLouis Dionne 11*dc71a77dSLouis Dionne // template <class... Types> class tuple; 12*dc71a77dSLouis Dionne 13*dc71a77dSLouis Dionne // template <size_t I, class... Types> 14*dc71a77dSLouis Dionne // const typename tuple_element<I, tuple<Types...> >::type&& 15*dc71a77dSLouis Dionne // get(const tuple<Types...>&& t); 16*dc71a77dSLouis Dionne 17*dc71a77dSLouis Dionne // UNSUPPORTED: c++03 18*dc71a77dSLouis Dionne 19*dc71a77dSLouis Dionne #include <tuple> 20*dc71a77dSLouis Dionne cref(T const &)21*dc71a77dSLouis Dionnetemplate <class T> void cref(T const&) {} 22*dc71a77dSLouis Dionne template <class T> void cref(T const&&) = delete; 23*dc71a77dSLouis Dionne tup4()24*dc71a77dSLouis Dionnestd::tuple<int> const tup4() { return std::make_tuple(4); } 25*dc71a77dSLouis Dionne f()26*dc71a77dSLouis Dionnevoid f() { 27*dc71a77dSLouis Dionne // LWG2485: tuple should not open a hole in the type system, get() should 28*dc71a77dSLouis Dionne // imitate [expr.ref]'s rules for accessing data members 29*dc71a77dSLouis Dionne { 30*dc71a77dSLouis Dionne cref(std::get<0>(tup4())); // expected-error {{call to deleted function 'cref'}} 31*dc71a77dSLouis Dionne } 32*dc71a77dSLouis Dionne } 33