diff --git a/include/sdbusplus/message/append.hpp b/include/sdbusplus/message/append.hpp
index a0ac9b5..0fb1eb8 100644
--- a/include/sdbusplus/message/append.hpp
+++ b/include/sdbusplus/message/append.hpp
@@ -104,6 +104,10 @@
 struct can_append_multiple<std::variant<Args...>> : std::false_type
 {};
 
+template <typename... Args>
+inline constexpr bool can_append_multiple_v =
+    can_append_multiple<Args...>::value;
+
 /** @struct append_single
  *  @brief Utility to append a single C++ element into a sd_bus_message.
  *
@@ -398,7 +402,7 @@
  *  A tuple of 1 entry can be added with sd_bus_message_append_basic.
  *
  *  Note: Some 1-entry tuples may need special handling due to
- *  can_append_multiple::value == false.
+ *  can_append_multiple_v == false.
  */
 template <typename Tuple>
 std::enable_if_t<1 == std::tuple_size_v<Tuple>>
@@ -422,22 +426,21 @@
  *  @tparam Tuple - A tuple of previously analyzed types.
  *  @tparam Arg - The argument to analyze for grouping.
  *
- *  Specialization for when can_append_multiple<Arg> is true.
+ *  Specialization for when can_append_multiple_v<Arg> is true.
  */
 template <typename Tuple, typename Arg>
-std::enable_if_t<
-    can_append_multiple<types::details::type_id_downcast_t<Arg>>::value>
+std::enable_if_t<can_append_multiple_v<types::details::type_id_downcast_t<Arg>>>
     append_grouping(sdbusplus::SdBusInterface* intf, sd_bus_message* m,
                     Tuple&& t, Arg&& arg);
 /** @brief Group a sequence of C++ types for appending into an sd_bus_message.
  *  @tparam Tuple - A tuple of previously analyzed types.
  *  @tparam Arg - The argument to analyze for grouping.
  *
- *  Specialization for when can_append_multiple<Arg> is false.
+ *  Specialization for when can_append_multiple_v<Arg> is false.
  */
 template <typename Tuple, typename Arg>
 std::enable_if_t<
-    !can_append_multiple<types::details::type_id_downcast_t<Arg>>::value>
+    !can_append_multiple_v<types::details::type_id_downcast_t<Arg>>>
     append_grouping(sdbusplus::SdBusInterface* intf, sd_bus_message* m,
                     Tuple&& t, Arg&& arg);
 /** @brief Group a sequence of C++ types for appending into an sd_bus_message.
@@ -445,11 +448,10 @@
  *  @tparam Arg - The argument to analyze for grouping.
  *  @tparam Rest - The remaining arguments left to analyze.
  *
- *  Specialization for when can_append_multiple<Arg> is true.
+ *  Specialization for when can_append_multiple_v<Arg> is true.
  */
 template <typename Tuple, typename Arg, typename... Rest>
-std::enable_if_t<
-    can_append_multiple<types::details::type_id_downcast_t<Arg>>::value>
+std::enable_if_t<can_append_multiple_v<types::details::type_id_downcast_t<Arg>>>
     append_grouping(sdbusplus::SdBusInterface* intf, sd_bus_message* m,
                     Tuple&& t, Arg&& arg, Rest&&... rest);
 /** @brief Group a sequence of C++ types for appending into an sd_bus_message.
@@ -457,17 +459,16 @@
  *  @tparam Arg - The argument to analyze for grouping.
  *  @tparam Rest - The remaining arguments left to analyze.
  *
- *  Specialization for when can_append_multiple<Arg> is false.
+ *  Specialization for when can_append_multiple_v<Arg> is false.
  */
 template <typename Tuple, typename Arg, typename... Rest>
 std::enable_if_t<
-    !can_append_multiple<types::details::type_id_downcast_t<Arg>>::value>
+    !can_append_multiple_v<types::details::type_id_downcast_t<Arg>>>
     append_grouping(sdbusplus::SdBusInterface* intf, sd_bus_message* m,
                     Tuple&& t, Arg&& arg, Rest&&... rest);
 
 template <typename Tuple, typename Arg>
-std::enable_if_t<
-    can_append_multiple<types::details::type_id_downcast_t<Arg>>::value>
+std::enable_if_t<can_append_multiple_v<types::details::type_id_downcast_t<Arg>>>
     append_grouping(sdbusplus::SdBusInterface* intf, sd_bus_message* m,
                     Tuple&& t, Arg&& arg)
 {
@@ -481,7 +482,7 @@
 
 template <typename Tuple, typename Arg>
 std::enable_if_t<
-    !can_append_multiple<types::details::type_id_downcast_t<Arg>>::value>
+    !can_append_multiple_v<types::details::type_id_downcast_t<Arg>>>
     append_grouping(sdbusplus::SdBusInterface* intf, sd_bus_message* m,
                     Tuple&& t, Arg&& arg)
 {
@@ -494,8 +495,7 @@
 }
 
 template <typename Tuple, typename Arg, typename... Rest>
-std::enable_if_t<
-    can_append_multiple<types::details::type_id_downcast_t<Arg>>::value>
+std::enable_if_t<can_append_multiple_v<types::details::type_id_downcast_t<Arg>>>
     append_grouping(sdbusplus::SdBusInterface* intf, sd_bus_message* m,
                     Tuple&& t, Arg&& arg, Rest&&... rest)
 {
@@ -511,7 +511,7 @@
 
 template <typename Tuple, typename Arg, typename... Rest>
 std::enable_if_t<
-    !can_append_multiple<types::details::type_id_downcast_t<Arg>>::value>
+    !can_append_multiple_v<types::details::type_id_downcast_t<Arg>>>
     append_grouping(sdbusplus::SdBusInterface* intf, sd_bus_message* m,
                     Tuple&& t, Arg&& arg, Rest&&... rest)
 {
diff --git a/include/sdbusplus/message/read.hpp b/include/sdbusplus/message/read.hpp
index ea58eec..2e01ec8 100644
--- a/include/sdbusplus/message/read.hpp
+++ b/include/sdbusplus/message/read.hpp
@@ -110,6 +110,9 @@
 struct can_read_multiple<std::variant<Args...>> : std::false_type
 {};
 
+template <typename... Args>
+inline constexpr bool can_read_multiple_v = can_read_multiple<Args...>::value;
+
 /** @struct read_single
  *  @brief Utility to read a single C++ element from a sd_bus_message.
  *
@@ -499,7 +502,7 @@
  *  A tuple of 1 entry can be read with sd_bus_message_read_basic.
  *
  *  Note: Some 1-entry tuples may need special handling due to
- *  can_read_multiple::value == false.
+ *  can_read_multiple_v == false.
  */
 template <typename Tuple>
 std::enable_if_t<1 == std::tuple_size_v<Tuple>>
@@ -523,22 +526,20 @@
  *  @tparam Tuple - A tuple of previously analyzed types.
  *  @tparam Arg - The argument to analyze for grouping.
  *
- *  Specialization for when can_read_multiple<Arg> is true.
+ *  Specialization for when can_read_multiple_v<Arg> is true.
  */
 template <typename Tuple, typename Arg>
-std::enable_if_t<
-    can_read_multiple<types::details::type_id_downcast_t<Arg>>::value>
+std::enable_if_t<can_read_multiple_v<types::details::type_id_downcast_t<Arg>>>
     read_grouping(sdbusplus::SdBusInterface* intf, sd_bus_message* m, Tuple&& t,
                   Arg&& arg);
 /** @brief Group a sequence of C++ types for reading from an sd_bus_message.
  *  @tparam Tuple - A tuple of previously analyzed types.
  *  @tparam Arg - The argument to analyze for grouping.
  *
- *  Specialization for when can_read_multiple<Arg> is false.
+ *  Specialization for when can_read_multiple_v<Arg> is false.
  */
 template <typename Tuple, typename Arg>
-std::enable_if_t<
-    !can_read_multiple<types::details::type_id_downcast_t<Arg>>::value>
+std::enable_if_t<!can_read_multiple_v<types::details::type_id_downcast_t<Arg>>>
     read_grouping(sdbusplus::SdBusInterface* intf, sd_bus_message* m, Tuple&& t,
                   Arg&& arg);
 /** @brief Group a sequence of C++ types for reading from an sd_bus_message.
@@ -546,11 +547,10 @@
  *  @tparam Arg - The argument to analyze for grouping.
  *  @tparam Rest - The remaining arguments left to analyze.
  *
- *  Specialization for when can_read_multiple<Arg> is true.
+ *  Specialization for when can_read_multiple_v<Arg> is true.
  */
 template <typename Tuple, typename Arg, typename... Rest>
-std::enable_if_t<
-    can_read_multiple<types::details::type_id_downcast_t<Arg>>::value>
+std::enable_if_t<can_read_multiple_v<types::details::type_id_downcast_t<Arg>>>
     read_grouping(sdbusplus::SdBusInterface* intf, sd_bus_message* m, Tuple&& t,
                   Arg&& arg, Rest&&... rest);
 /** @brief Group a sequence of C++ types for reading from an sd_bus_message.
@@ -558,17 +558,15 @@
  *  @tparam Arg - The argument to analyze for grouping.
  *  @tparam Rest - The remaining arguments left to analyze.
  *
- *  Specialization for when can_read_multiple<Arg> is false.
+ *  Specialization for when can_read_multiple_v<Arg> is false.
  */
 template <typename Tuple, typename Arg, typename... Rest>
-std::enable_if_t<
-    !can_read_multiple<types::details::type_id_downcast_t<Arg>>::value>
+std::enable_if_t<!can_read_multiple_v<types::details::type_id_downcast_t<Arg>>>
     read_grouping(sdbusplus::SdBusInterface* intf, sd_bus_message* m, Tuple&& t,
                   Arg&& arg, Rest&&... rest);
 
 template <typename Tuple, typename Arg>
-std::enable_if_t<
-    can_read_multiple<types::details::type_id_downcast_t<Arg>>::value>
+std::enable_if_t<can_read_multiple_v<types::details::type_id_downcast_t<Arg>>>
     read_grouping(sdbusplus::SdBusInterface* intf, sd_bus_message* m, Tuple&& t,
                   Arg&& arg)
 {
@@ -581,8 +579,7 @@
 }
 
 template <typename Tuple, typename Arg>
-std::enable_if_t<
-    !can_read_multiple<types::details::type_id_downcast_t<Arg>>::value>
+std::enable_if_t<!can_read_multiple_v<types::details::type_id_downcast_t<Arg>>>
     read_grouping(sdbusplus::SdBusInterface* intf, sd_bus_message* m, Tuple&& t,
                   Arg&& arg)
 {
@@ -595,8 +592,7 @@
 }
 
 template <typename Tuple, typename Arg, typename... Rest>
-std::enable_if_t<
-    can_read_multiple<types::details::type_id_downcast_t<Arg>>::value>
+std::enable_if_t<can_read_multiple_v<types::details::type_id_downcast_t<Arg>>>
     read_grouping(sdbusplus::SdBusInterface* intf, sd_bus_message* m, Tuple&& t,
                   Arg&& arg, Rest&&... rest)
 {
@@ -610,8 +606,7 @@
 }
 
 template <typename Tuple, typename Arg, typename... Rest>
-std::enable_if_t<
-    !can_read_multiple<types::details::type_id_downcast_t<Arg>>::value>
+std::enable_if_t<!can_read_multiple_v<types::details::type_id_downcast_t<Arg>>>
     read_grouping(sdbusplus::SdBusInterface* intf, sd_bus_message* m, Tuple&& t,
                   Arg&& arg, Rest&&... rest)
 {
diff --git a/include/sdbusplus/message/types.hpp b/include/sdbusplus/message/types.hpp
index 3c956b0..3744d15 100644
--- a/include/sdbusplus/message/types.hpp
+++ b/include/sdbusplus/message/types.hpp
@@ -38,6 +38,7 @@
  */
 template <typename... Args>
 constexpr auto type_id();
+
 /** @fn type_id_nonull()
  *  @brief A non-null-terminated version of type_id.
  *
@@ -138,6 +139,9 @@
 #endif
 };
 
+template <char... Chars>
+inline constexpr auto tuple_type_id_v = tuple_type_id<Chars...>::value;
+
 /** @fn type_id_single()
  *  @brief Get a tuple containing the dbus type character(s) for a C++ type.
  *
@@ -172,6 +176,10 @@
     public std::conditional_t<
         std::is_enum_v<T>, tuple_type_id<SD_BUS_TYPE_STRING>, undefined_type_id>
 {};
+
+template <typename... Args>
+inline constexpr auto type_id_v = type_id<Args...>::value;
+
 // Specializations for built-in types.
 template <>
 struct type_id<bool> : tuple_type_id<SD_BUS_TYPE_BOOLEAN>
@@ -225,28 +233,27 @@
 struct type_id<T, std::enable_if_t<utility::has_const_iterator_v<T>>> :
     std::false_type
 {
-    static constexpr auto value = std::tuple_cat(
-        tuple_type_id<SD_BUS_TYPE_ARRAY>::value,
-        type_id<type_id_downcast_t<typename T::value_type>>::value);
+    static constexpr auto value =
+        std::tuple_cat(tuple_type_id_v<SD_BUS_TYPE_ARRAY>,
+                       type_id_v<type_id_downcast_t<typename T::value_type>>);
 };
 
 template <typename T1, typename T2>
 struct type_id<std::pair<T1, T2>>
 {
-    static constexpr auto value =
-        std::tuple_cat(tuple_type_id<SD_BUS_TYPE_DICT_ENTRY_BEGIN>::value,
-                       type_id<type_id_downcast_t<T1>>::value,
-                       type_id<type_id_downcast_t<T2>>::value,
-                       tuple_type_id<SD_BUS_TYPE_DICT_ENTRY_END>::value);
+    static constexpr auto value = std::tuple_cat(
+        tuple_type_id_v<SD_BUS_TYPE_DICT_ENTRY_BEGIN>,
+        type_id_v<type_id_downcast_t<T1>>, type_id_v<type_id_downcast_t<T2>>,
+        tuple_type_id_v<SD_BUS_TYPE_DICT_ENTRY_END>);
 };
 
 template <typename... Args>
 struct type_id<std::tuple<Args...>>
 {
     static constexpr auto value =
-        std::tuple_cat(tuple_type_id<SD_BUS_TYPE_STRUCT_BEGIN>::value,
-                       type_id<type_id_downcast_t<Args>>::value...,
-                       tuple_type_id<SD_BUS_TYPE_STRUCT_END>::value);
+        std::tuple_cat(tuple_type_id_v<SD_BUS_TYPE_STRUCT_BEGIN>,
+                       type_id_v<type_id_downcast_t<Args>>...,
+                       tuple_type_id_v<SD_BUS_TYPE_STRUCT_END>);
 };
 
 template <typename... Args>
@@ -270,7 +277,7 @@
 {
     static_assert(!std::is_base_of_v<undefined_type_id, type_id<T>>,
                   "No dbus type conversion provided for type.");
-    return type_id<T>::value;
+    return type_id_v<T>;
 }
 
 template <typename T, typename... Args>
