1beb6efb4SLouis Dionne //===----------------------------------------------------------------------===//
2beb6efb4SLouis Dionne //
3beb6efb4SLouis Dionne // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4beb6efb4SLouis Dionne // See https://llvm.org/LICENSE.txt for license information.
5beb6efb4SLouis Dionne // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6beb6efb4SLouis Dionne //
7beb6efb4SLouis Dionne //===----------------------------------------------------------------------===//
8beb6efb4SLouis Dionne 
931cbe0f2SLouis Dionne // UNSUPPORTED: c++03, c++11, c++14, c++17
10beb6efb4SLouis Dionne 
11beb6efb4SLouis Dionne // <functional>
12beb6efb4SLouis Dionne //
13beb6efb4SLouis Dionne // reference_wrapper
14beb6efb4SLouis Dionne //
15beb6efb4SLouis Dionne // template <ObjectType T> reference_wrapper<const T> cref(const T& t);
16beb6efb4SLouis Dionne //
17beb6efb4SLouis Dionne //  where T is an incomplete type (since C++20)
18beb6efb4SLouis Dionne 
19beb6efb4SLouis Dionne #include <functional>
20beb6efb4SLouis Dionne #include <cassert>
21beb6efb4SLouis Dionne 
227fc6a556SMarshall Clow #include "test_macros.h"
237fc6a556SMarshall Clow 
24beb6efb4SLouis Dionne 
25beb6efb4SLouis Dionne struct Foo;
26beb6efb4SLouis Dionne 
27beb6efb4SLouis Dionne Foo& get_foo();
28beb6efb4SLouis Dionne 
test()29beb6efb4SLouis Dionne void test() {
30beb6efb4SLouis Dionne     Foo const& foo = get_foo();
31beb6efb4SLouis Dionne     std::reference_wrapper<Foo const> ref = std::cref(foo);
32beb6efb4SLouis Dionne     assert(&ref.get() == &foo);
33beb6efb4SLouis Dionne }
34beb6efb4SLouis Dionne 
35beb6efb4SLouis Dionne struct Foo { };
36beb6efb4SLouis Dionne 
get_foo()37beb6efb4SLouis Dionne Foo& get_foo() {
38beb6efb4SLouis Dionne     static Foo foo;
39beb6efb4SLouis Dionne     return foo;
40beb6efb4SLouis Dionne }
41beb6efb4SLouis Dionne 
main(int,char **)42*504bc07dSLouis Dionne int main(int, char**) {
43beb6efb4SLouis Dionne     test();
44*504bc07dSLouis Dionne     return 0;
45beb6efb4SLouis Dionne }
46