51 lines · cpp
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-exception6//7//===----------------------------------------------------------------------===//8 9// <functional>10 11// reference_wrapper12 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(i);30 std::reference_wrapper<const int> r2 = std::cref(r1);31 assert(&r2.get() == &i);32 }33 {34 adl::A a;35 std::reference_wrapper<const adl::A> a1 = std::cref(a);36 std::reference_wrapper<const adl::A> a2 = std::cref(a1);37 assert(&a2.get() == &a);38 }39 return true;40}41 42int main(int, char**)43{44 test();45#if TEST_STD_VER > 1746 static_assert(test());47#endif48 49 return 0;50}51