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<T> 14beb6efb4SLouis Dionne // 15beb6efb4SLouis Dionne // where T is an incomplete type (since C++20) 16beb6efb4SLouis Dionne 17beb6efb4SLouis Dionne 18beb6efb4SLouis Dionne #include <functional> 19beb6efb4SLouis Dionne #include <cassert> 20beb6efb4SLouis Dionne 217fc6a556SMarshall Clow #include "test_macros.h" 227fc6a556SMarshall Clow 23beb6efb4SLouis Dionne 24beb6efb4SLouis Dionne struct Foo; 25beb6efb4SLouis Dionne 26beb6efb4SLouis Dionne Foo& get_foo(); 27beb6efb4SLouis Dionne test()28beb6efb4SLouis Dionnevoid test() { 29beb6efb4SLouis Dionne Foo& foo = get_foo(); 30beb6efb4SLouis Dionne std::reference_wrapper<Foo> ref{foo}; 31beb6efb4SLouis Dionne assert(&ref.get() == &foo); 32beb6efb4SLouis Dionne } 33beb6efb4SLouis Dionne 34beb6efb4SLouis Dionne struct Foo { }; 35beb6efb4SLouis Dionne get_foo()36beb6efb4SLouis DionneFoo& get_foo() { 37beb6efb4SLouis Dionne static Foo foo; 38beb6efb4SLouis Dionne return foo; 39beb6efb4SLouis Dionne } 40beb6efb4SLouis Dionne main(int,char **)41*504bc07dSLouis Dionneint main(int, char**) { 42beb6efb4SLouis Dionne test(); 43*504bc07dSLouis Dionne return 0; 44beb6efb4SLouis Dionne } 45