[gjs] arg: Use if constexpr instead of std::enable_if when possible
- From: Philip Chimento <pchimento src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gjs] arg: Use if constexpr instead of std::enable_if when possible
- Date: Sun, 9 Aug 2020 17:58:04 +0000 (UTC)
commit 030c20346add7f17a1d17e246d86de80e3c15d2f
Author: Marco Trevisan (TreviƱo) <mail 3v1n0 net>
Date: Sun Aug 9 01:47:49 2020 +0200
arg: Use if constexpr instead of std::enable_if when possible
We have some dual codepaths that can be simplified using constexpr
checks instead of using enable_if specializations that may be harder to
debug
gi/arg-inl.h | 34 ++++++++++++++--------------------
1 file changed, 14 insertions(+), 20 deletions(-)
---
diff --git a/gi/arg-inl.h b/gi/arg-inl.h
index e6492ee5..9c3cb8ca 100644
--- a/gi/arg-inl.h
+++ b/gi/arg-inl.h
@@ -168,17 +168,14 @@ gjs_arg_member<unsigned, GI_TYPE_TAG_INTERFACE>(GIArgument* arg) {
}
template <typename T, GITypeTag TAG = GI_TYPE_TAG_VOID>
-inline std::enable_if_t<!std::is_pointer_v<T>> gjs_arg_set(GIArgument* arg,
- T v) {
- gjs_arg_member<T, TAG>(arg) = v;
-}
-
-template <typename T, GITypeTag TAG = GI_TYPE_TAG_VOID>
-inline std::enable_if_t<std::is_pointer_v<T>> gjs_arg_set(GIArgument* arg,
- T v) {
- using NonconstPtrT =
- std::add_pointer_t<std::remove_const_t<std::remove_pointer_t<T>>>;
- gjs_arg_member<NonconstPtrT, TAG>(arg) = const_cast<NonconstPtrT>(v);
+inline void gjs_arg_set(GIArgument* arg, T v) {
+ if constexpr (std::is_pointer_v<T>) {
+ using NonconstPtrT =
+ std::add_pointer_t<std::remove_const_t<std::remove_pointer_t<T>>>;
+ gjs_arg_member<NonconstPtrT, TAG>(arg) = const_cast<NonconstPtrT>(v);
+ } else {
+ gjs_arg_member<T, TAG>(arg) = v;
+ }
}
// Store function pointers as void*. It is a requirement of GLib that your
@@ -222,19 +219,16 @@ template <>
}
template <typename T, GITypeTag TAG = GI_TYPE_TAG_VOID>
-[[nodiscard]] inline std::enable_if_t<std::is_integral_v<T>, void*>
-gjs_arg_get_as_pointer(GIArgument* arg) {
+[[nodiscard]] inline void* gjs_arg_get_as_pointer(GIArgument* arg) {
return gjs_int_to_pointer(gjs_arg_get<T, TAG>(arg));
}
template <typename T, GITypeTag TAG = GI_TYPE_TAG_VOID>
-inline std::enable_if_t<!std::is_pointer_v<T>> gjs_arg_unset(GIArgument* arg) {
- gjs_arg_set<T, TAG>(arg, static_cast<T>(0));
-}
-
-template <typename T, GITypeTag TAG = GI_TYPE_TAG_VOID>
-inline std::enable_if_t<std::is_pointer_v<T>> gjs_arg_unset(GIArgument* arg) {
- gjs_arg_set<T, TAG>(arg, nullptr);
+inline void gjs_arg_unset(GIArgument* arg) {
+ if constexpr (std::is_pointer_v<T>)
+ gjs_arg_set<T, TAG>(arg, nullptr);
+ else
+ gjs_arg_set<T, TAG>(arg, static_cast<T>(0));
}
// Implementation to store rounded (u)int64_t numbers into double
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]