Author: ericwf Date: Fri Oct 14 02:19:52 2016 New Revision: 284209 URL: http://llvm.org/viewvc/llvm-project?rev=284209&view=rev Log: Add void_t and invoke feature test macros
Added: libcxx/trunk/test/std/utilities/function.objects/func.invoke/invoke_feature_test_macro.pass.cpp libcxx/trunk/test/std/utilities/meta/meta.unary.prop.query/void_t_feature_test_macro.pass.cpp Modified: libcxx/trunk/include/functional libcxx/trunk/include/type_traits Modified: libcxx/trunk/include/functional URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/functional?rev=284209&r1=284208&r2=284209&view=diff ============================================================================== --- libcxx/trunk/include/functional (original) +++ libcxx/trunk/include/functional Fri Oct 14 02:19:52 2016 @@ -2635,6 +2635,8 @@ struct _LIBCPP_TYPE_VIS_ONLY hash : publ #if _LIBCPP_STD_VER > 14 +#define __cpp_lib_invoke 201411 + template <class _Fn, class ..._Args> result_of_t<_Fn&&(_Args&&...)> invoke(_Fn&& __f, _Args&&... __args) Modified: libcxx/trunk/include/type_traits URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/type_traits?rev=284209&r1=284208&r2=284209&view=diff ============================================================================== --- libcxx/trunk/include/type_traits (original) +++ libcxx/trunk/include/type_traits Fri Oct 14 02:19:52 2016 @@ -4599,6 +4599,8 @@ struct __has_operator_addressof #endif // _LIBCPP_CXX03_LANG #if _LIBCPP_STD_VER > 14 + +#define __cpp_lib_void_t 201411 template <class...> using void_t = void; # ifndef _LIBCPP_HAS_NO_VARIADICS Added: libcxx/trunk/test/std/utilities/function.objects/func.invoke/invoke_feature_test_macro.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/function.objects/func.invoke/invoke_feature_test_macro.pass.cpp?rev=284209&view=auto ============================================================================== --- libcxx/trunk/test/std/utilities/function.objects/func.invoke/invoke_feature_test_macro.pass.cpp (added) +++ libcxx/trunk/test/std/utilities/function.objects/func.invoke/invoke_feature_test_macro.pass.cpp Fri Oct 14 02:19:52 2016 @@ -0,0 +1,39 @@ +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// <functional> + +// template <class F, class ...Args> +// result_of_t<F&&(Args&&...)> invoke(F&&, Args&&...); + +#include <functional> +#include <cassert> + +#include "test_macros.h" + +#if TEST_STD_VER <= 14 +# ifdef __cpp_lib_invoke +# error Feature test macro should be defined +# endif +#else +# ifndef __cpp_lib_invoke +# error Feature test macro not defined +# endif +# if __cpp_lib_invoke != 201411 +# error __cpp_lib_invoke has the wrong value +# endif +#endif + +int foo(int) { return 42; } + +int main() { +#if defined(__cpp_lib_invoke) + assert(std::invoke(foo, 101) == 42); +#endif +} \ No newline at end of file Added: libcxx/trunk/test/std/utilities/meta/meta.unary.prop.query/void_t_feature_test_macro.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/meta/meta.unary.prop.query/void_t_feature_test_macro.pass.cpp?rev=284209&view=auto ============================================================================== --- libcxx/trunk/test/std/utilities/meta/meta.unary.prop.query/void_t_feature_test_macro.pass.cpp (added) +++ libcxx/trunk/test/std/utilities/meta/meta.unary.prop.query/void_t_feature_test_macro.pass.cpp Fri Oct 14 02:19:52 2016 @@ -0,0 +1,36 @@ +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// void_t + +#include <type_traits> + +#include "test_macros.h" + +#if TEST_STD_VER <= 14 +# ifdef __cpp_lib_void_t +# error Feature test macro should not be defined! +# endif +#else +# ifndef __cpp_lib_void_t +# error Feature test macro is not defined +# endif +# if __cpp_lib_void_t != 201411 +# error Feature test macro has the wrong value +# endif +#endif + +int main() +{ +#if defined(__cpp_lib_void_t) + static_assert(std::is_same_v<std::void_t<int>, void>, ""); +#endif +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits