1//===----------------------------------------------------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9// <functional>
10
11// reference_wrapper
12
13// template <ObjectType T> reference_wrapper<const T> cref(reference_wrapper<T> t);
14
15#include <functional>
16#include <cassert>
17
18#include "test_macros.h"
19
20namespace adl {
21 struct A {};
22 void cref(A) {}
23}
24
25TEST_CONSTEXPR_CXX20 bool test()
26{
27 {
28 const int i = 0;
29 std::reference_wrapper<const int> r1 = std::cref(t: i);
30 std::reference_wrapper<const int> r2 = std::cref(t: r1);
31 assert(&r2.get() == &i);
32 }
33 {
34 adl::A a;
35 std::reference_wrapper<const adl::A> a1 = std::cref(t: a);
36 std::reference_wrapper<const adl::A> a2 = std::cref(t: a1);
37 assert(&a2.get() == &a);
38 }
39 return true;
40}
41
42int main(int, char**)
43{
44 test();
45#if TEST_STD_VER > 17
46 static_assert(test());
47#endif
48
49 return 0;
50}
51

source code of libcxx/test/std/utilities/function.objects/refwrap/refwrap.helpers/cref_2.pass.cpp