• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 // UNSUPPORTED: c++03, c++11, c++14, c++17
10 
11 // <functional>
12 //
13 // reference_wrapper
14 //
15 // template <ObjectType T> reference_wrapper<T> ref(T& t);
16 //
17 //  where T is an incomplete type (since C++20)
18 
19 #include <functional>
20 #include <cassert>
21 
22 #include "test_macros.h"
23 
24 
25 struct Foo;
26 
27 Foo& get_foo();
28 
test()29 void test() {
30     Foo& foo = get_foo();
31     std::reference_wrapper<Foo> ref = std::ref(foo);
32     assert(&ref.get() == &foo);
33 }
34 
35 struct Foo { };
36 
get_foo()37 Foo& get_foo() {
38     static Foo foo;
39     return foo;
40 }
41 
main(int,char **)42 int main(int, char**) {
43     test();
44     return 0;
45 }
46