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 <class... ArgTypes>
16// std::invoke_result_t<T&, ArgTypes...>
17// operator()(ArgTypes&&... args) const;
18//
19// Requires T to be a complete type (since C++20).
20
21#include <functional>
22
23
24struct Foo;
25Foo& get_foo();
26
27void test() {
28 std::reference_wrapper<Foo> ref = get_foo();
29 ref(0); // incomplete at the point of call
30}
31
32struct Foo { void operator()(int) const { } };
33Foo& get_foo() { static Foo foo; return foo; }
34
35int main(int, char**) {
36 test();
37 return 0;
38}
39

source code of libcxx/test/std/utilities/function.objects/refwrap/refwrap.invoke/invoke.incomplete.compile.fail.cpp