diff --git a/folly/Traits.h b/folly/Traits.h index a399c31c02a..121757acd32 100644 --- a/folly/Traits.h +++ b/folly/Traits.h @@ -1151,8 +1151,10 @@ using type_list_size_t = namespace traits_detail { -template -using value_pack_constant = std::integral_constant; +template +struct value_pack_constant { + inline static constexpr decltype(V) value = V; +}; } // namespace traits_detail @@ -1182,9 +1184,8 @@ using value_pack_element_type_t = type_pack_element_t; /// /// In the value pack V..., the Ith element. template -inline constexpr value_pack_element_type_t const& - value_pack_element_v = - type_pack_element_t...>::value; +inline constexpr value_pack_element_type_t value_pack_element_v = + type_pack_element_t...>::value; namespace traits_detail { @@ -1196,7 +1197,7 @@ struct value_list_traits_> { template using element_type = value_pack_element_type_t; template - static constexpr value_pack_element_type_t const& element = + static constexpr value_pack_element_type_t element = value_pack_element_v; }; @@ -1230,9 +1231,8 @@ using value_list_element_type_t = /// /// For List, the Ith element. template -inline constexpr value_list_element_type_t const& - value_list_element_v = - traits_detail::value_list_traits_::template element; +inline constexpr value_list_element_type_t value_list_element_v = + traits_detail::value_list_traits_::template element; /** * Checks the requirements that the Hasher class must satisfy