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 Fiselierint foo(int) { return 42; } 33498ee00aSEric Fiselier main(int,char **)34*2df59c50SJF Bastienint 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