xref: /llvm-project/libcxx/test/std/utilities/tuple/tuple.tuple/tuple.elem/get_const_rv.verify.cpp (revision dc71a77d33620830020c939bba25ebdfdd1b6194)
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 Dionne template <class T> void cref(T const&) {}
22*dc71a77dSLouis Dionne template <class T> void cref(T const&&) = delete;
23*dc71a77dSLouis Dionne 
tup4()24*dc71a77dSLouis Dionne std::tuple<int> const tup4() { return std::make_tuple(4); }
25*dc71a77dSLouis Dionne 
f()26*dc71a77dSLouis Dionne void 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