@@ -54,7 +54,8 @@ struct call_base {
54
54
};
55
55
56
56
template <typename , bool > struct callable_test : call_base {};
57
- template <typename F> struct callable_test <F, true > : F, call_base {};
57
+ template <typename F>
58
+ struct callable_test <F, true > : remove_cvref_t <F>, call_base {};
58
59
59
60
template <typename F, typename = void > constexpr auto is_func_obj = true ;
60
61
template <typename F>
@@ -144,7 +145,7 @@ struct for_each_t<L<Vs...>> {
144
145
(f.template operator ()<Vs>(), ...);
145
146
}
146
147
};
147
- template <template <typename , auto ...> typename L, typename T, T... Vs>
148
+ template <template <typename X, X ...> typename L, typename T, T... Vs>
148
149
struct for_each_t <L<T, Vs...>> {
149
150
template <typename F> constexpr auto operator ()(F &&f) const {
150
151
(f.template operator ()<Vs>(), ...);
@@ -174,7 +175,7 @@ struct apply_sequence_t<L<Vs...>> {
174
175
return f.template operator ()<Vs...>();
175
176
}
176
177
};
177
- template <template <typename , auto ...> typename L, typename T, T... Vs>
178
+ template <template <typename X, X ...> typename L, typename T, T... Vs>
178
179
struct apply_sequence_t <L<T, Vs...>> {
179
180
template <typename F> constexpr auto operator ()(F &&f) const {
180
181
return f.template operator ()<Vs...>();
0 commit comments