1498ee00aSEric Fiselier //===----------------------------------------------------------------------===//
2498ee00aSEric Fiselier //
357b08b09SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
457b08b09SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
557b08b09SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6498ee00aSEric Fiselier //
7498ee00aSEric Fiselier //===----------------------------------------------------------------------===//
8498ee00aSEric Fiselier 
9498ee00aSEric Fiselier // <functional>
10498ee00aSEric Fiselier 
11498ee00aSEric Fiselier // template <class F, class ...Args>
12498ee00aSEric Fiselier // result_of_t<F&&(Args&&...)> invoke(F&&, Args&&...);
13498ee00aSEric Fiselier 
14498ee00aSEric Fiselier #include <functional>
15498ee00aSEric Fiselier #include <cassert>
16498ee00aSEric Fiselier 
17498ee00aSEric Fiselier #include "test_macros.h"
18498ee00aSEric Fiselier 
19498ee00aSEric Fiselier #if TEST_STD_VER <= 14
20498ee00aSEric Fiselier # ifdef __cpp_lib_invoke
21498ee00aSEric Fiselier #   error Feature test macro should be defined
22498ee00aSEric Fiselier # endif
23498ee00aSEric Fiselier #else
24498ee00aSEric Fiselier # ifndef __cpp_lib_invoke
25498ee00aSEric Fiselier #   error Feature test macro not defined
26498ee00aSEric Fiselier # endif
27498ee00aSEric Fiselier # if __cpp_lib_invoke != 201411
28498ee00aSEric Fiselier #   error __cpp_lib_invoke has the wrong value
29498ee00aSEric Fiselier # endif
30498ee00aSEric Fiselier #endif
31498ee00aSEric Fiselier 
foo(int)32498ee00aSEric Fiselier int foo(int) { return 42; }
33498ee00aSEric Fiselier 
main(int,char **)34*2df59c50SJF Bastien int main(int, char**) {
35498ee00aSEric Fiselier #if defined(__cpp_lib_invoke)
36498ee00aSEric Fiselier   assert(std::invoke(foo, 101) == 42);
37498ee00aSEric Fiselier #endif
38*2df59c50SJF Bastien 
39*2df59c50SJF Bastien   return 0;
40498ee00aSEric Fiselier }
41