Skip to content

Commit f89a101

Browse files
yfeldblumfacebook-github-bot
authored andcommitted
let value-pack and value-list traits use only values
Summary: GCC has trouble with references to non-type template parameters. Differential Revision: D58636952 fbshipit-source-id: 507664de8ae1d5fa35c652f697fb055d1b4f33f7
1 parent 7e04ec7 commit f89a101

File tree

1 file changed

+9
-9
lines changed

1 file changed

+9
-9
lines changed

folly/Traits.h

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1151,8 +1151,10 @@ using type_list_size_t =
11511151

11521152
namespace traits_detail {
11531153

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+
};
11561158

11571159
} // namespace traits_detail
11581160

@@ -1182,9 +1184,8 @@ using value_pack_element_type_t = type_pack_element_t<I, decltype(V)...>;
11821184
///
11831185
/// In the value pack V..., the Ith element.
11841186
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;
11881189

11891190
namespace traits_detail {
11901191

@@ -1196,7 +1197,7 @@ struct value_list_traits_<List<V...>> {
11961197
template <std::size_t I>
11971198
using element_type = value_pack_element_type_t<I, V...>;
11981199
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 =
12001201
value_pack_element_v<I, V...>;
12011202
};
12021203

@@ -1230,9 +1231,8 @@ using value_list_element_type_t =
12301231
///
12311232
/// For List<V...>, the Ith element.
12321233
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>;
12361236

12371237
/**
12381238
* Checks the requirements that the Hasher class must satisfy

0 commit comments

Comments
 (0)