utility: container_traits: define C++17 _v aliases
Define C++17 'foo_v' style aliases and replace usages of
'foo<...>::value' with them.
Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
Change-Id: I24d28e40ef20e24f97391dbf8fcab2f881f2ff94
diff --git a/include/sdbusplus/message/append.hpp b/include/sdbusplus/message/append.hpp
index 9e9827b..a0ac9b5 100644
--- a/include/sdbusplus/message/append.hpp
+++ b/include/sdbusplus/message/append.hpp
@@ -88,7 +88,7 @@
// std::vector/map/unordered_map/set need loops
template <typename T>
struct can_append_multiple<
- T, typename std::enable_if_t<utility::has_const_iterator<T>::value>> :
+ T, typename std::enable_if_t<utility::has_const_iterator_v<T>>> :
std::false_type
{};
// std::pair needs to be broken down into components.
@@ -260,7 +260,7 @@
/** @brief Specialization of append_single for containers (ie vector, array,
* set, map, etc) */
template <typename T>
-struct append_single<T, std::enable_if_t<utility::has_const_iterator<T>::value>>
+struct append_single<T, std::enable_if_t<utility::has_const_iterator_v<T>>>
{
template <typename S>
static void op(sdbusplus::SdBusInterface* intf, sd_bus_message* m, S&& s)
diff --git a/include/sdbusplus/message/read.hpp b/include/sdbusplus/message/read.hpp
index 46721f8..ea58eec 100644
--- a/include/sdbusplus/message/read.hpp
+++ b/include/sdbusplus/message/read.hpp
@@ -91,8 +91,8 @@
// std::vector/map/unordered_vector/set need loops
template <typename T>
struct can_read_multiple<
- T, typename std::enable_if_t<utility::has_emplace_method<T>::value ||
- utility::has_emplace_back_method<T>::value>> :
+ T, typename std::enable_if_t<utility::has_emplace_method_v<T> ||
+ utility::has_emplace_back_method_v<T>>> :
std::false_type
{};
@@ -233,8 +233,7 @@
/** @brief Specialization of read_single for std::vectors. */
template <typename T>
-struct read_single<T,
- std::enable_if_t<utility::has_emplace_back_method<T>::value>>
+struct read_single<T, std::enable_if_t<utility::has_emplace_back_method_v<T>>>
{
template <typename S>
static void op(sdbusplus::SdBusInterface* intf, sd_bus_message* m, S&& s)
@@ -271,7 +270,7 @@
/** @brief Specialization of read_single for std::map. */
template <typename T>
-struct read_single<T, std::enable_if_t<utility::has_emplace_method<T>::value>>
+struct read_single<T, std::enable_if_t<utility::has_emplace_method_v<T>>>
{
template <typename S>
static void op(sdbusplus::SdBusInterface* intf, sd_bus_message* m, S&& s)
diff --git a/include/sdbusplus/message/types.hpp b/include/sdbusplus/message/types.hpp
index 1adc9b4..3c956b0 100644
--- a/include/sdbusplus/message/types.hpp
+++ b/include/sdbusplus/message/types.hpp
@@ -222,7 +222,7 @@
{};
template <typename T>
-struct type_id<T, std::enable_if_t<utility::has_const_iterator<T>::value>> :
+struct type_id<T, std::enable_if_t<utility::has_const_iterator_v<T>>> :
std::false_type
{
static constexpr auto value = std::tuple_cat(
diff --git a/include/sdbusplus/utility/container_traits.hpp b/include/sdbusplus/utility/container_traits.hpp
index eb5d625..2ad993a 100644
--- a/include/sdbusplus/utility/container_traits.hpp
+++ b/include/sdbusplus/utility/container_traits.hpp
@@ -30,6 +30,9 @@
static constexpr bool value = sizeof(test<T>(0)) == sizeof(yes);
};
+template <typename T>
+inline constexpr bool has_const_iterator_v = has_const_iterator<T>::value;
+
/** has_emplace_method - Determine if type has a method template named emplace
*
* @tparam T - Type to be tested.
@@ -55,6 +58,9 @@
std::is_same_v<std::true_type, decltype(test<T, dummy>(nullptr))>;
};
+template <typename T>
+inline constexpr bool has_emplace_method_v = has_emplace_method<T>::value;
+
/** has_emplace_method - Determine if type has a method template named
* emplace_back
*
@@ -81,5 +87,9 @@
std::is_same_v<std::true_type, decltype(test<T, dummy>(nullptr))>;
};
+template <typename T>
+inline constexpr bool has_emplace_back_method_v =
+ has_emplace_back_method<T>::value;
+
} // namespace utility
} // namespace sdbusplus