@@ -1151,8 +1151,10 @@ using type_list_size_t =
1151
1151
1152
1152
namespace traits_detail {
1153
1153
1154
- template <auto V>
1155
- using value_pack_constant = std::integral_constant<decltype (V), V>;
1154
+ template <decltype (auto ) V>
1155
+ struct value_pack_constant {
1156
+ inline static constexpr decltype (V) value = V;
1157
+ };
1156
1158
1157
1159
} // namespace traits_detail
1158
1160
@@ -1182,9 +1184,8 @@ using value_pack_element_type_t = type_pack_element_t<I, decltype(V)...>;
1182
1184
// /
1183
1185
// / In the value pack V..., the Ith element.
1184
1186
template <std::size_t I, auto ... V>
1185
- inline constexpr value_pack_element_type_t <I, V...> const &
1186
- value_pack_element_v =
1187
- type_pack_element_t <I, traits_detail::value_pack_constant<V>...>::value;
1187
+ inline constexpr value_pack_element_type_t <I, V...> value_pack_element_v =
1188
+ type_pack_element_t <I, traits_detail::value_pack_constant<V>...>::value;
1188
1189
1189
1190
namespace traits_detail {
1190
1191
@@ -1196,7 +1197,7 @@ struct value_list_traits_<List<V...>> {
1196
1197
template <std::size_t I>
1197
1198
using element_type = value_pack_element_type_t <I, V...>;
1198
1199
template <std::size_t I>
1199
- static constexpr value_pack_element_type_t <I, V...> const & element =
1200
+ static constexpr value_pack_element_type_t <I, V...> element =
1200
1201
value_pack_element_v<I, V...>;
1201
1202
};
1202
1203
@@ -1230,9 +1231,8 @@ using value_list_element_type_t =
1230
1231
// /
1231
1232
// / For List<V...>, the Ith element.
1232
1233
template <std::size_t I, typename List>
1233
- inline constexpr value_list_element_type_t <I, List> const &
1234
- value_list_element_v =
1235
- traits_detail::value_list_traits_<List>::template element<I>;
1234
+ inline constexpr value_list_element_type_t <I, List> value_list_element_v =
1235
+ traits_detail::value_list_traits_<List>::template element<I>;
1236
1236
1237
1237
/* *
1238
1238
* Checks the requirements that the Hasher class must satisfy
0 commit comments