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<T> ref(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 Dionnevoid test() { 30beb6efb4SLouis Dionne Foo& foo = get_foo(); 31beb6efb4SLouis Dionne std::reference_wrapper<Foo> ref = std::ref(foo); 32beb6efb4SLouis Dionne assert(&ref.get() == &foo); 33beb6efb4SLouis Dionne } 34beb6efb4SLouis Dionne 35beb6efb4SLouis Dionne struct Foo { }; 36beb6efb4SLouis Dionne get_foo()37beb6efb4SLouis DionneFoo& get_foo() { 38beb6efb4SLouis Dionne static Foo foo; 39beb6efb4SLouis Dionne return foo; 40beb6efb4SLouis Dionne } 41beb6efb4SLouis Dionne main(int,char **)42*504bc07dSLouis Dionneint main(int, char**) { 43beb6efb4SLouis Dionne test(); 44*504bc07dSLouis Dionne return 0; 45beb6efb4SLouis Dionne } 46