[libcxx] r284209 - Add void_t and invoke feature test macros

Eric Fiselier via cfe-commits cfe-commits at lists.llvm.org
Fri Oct 14 00:19:53 PDT 2016


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
+}




More information about the cfe-commits mailing list