@@ -54,7 +54,8 @@ struct call_base {
5454};
5555
5656template <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 {};
5859
5960template <typename F, typename = void > constexpr auto is_func_obj = true ;
6061template <typename F>
@@ -144,7 +145,7 @@ struct for_each_t<L<Vs...>> {
144145 (f.template operator ()<Vs>(), ...);
145146 }
146147};
147- template <template <typename , auto ...> typename L, typename T, T... Vs>
148+ template <template <typename X, X ...> typename L, typename T, T... Vs>
148149struct for_each_t <L<T, Vs...>> {
149150 template <typename F> constexpr auto operator ()(F &&f) const {
150151 (f.template operator ()<Vs>(), ...);
@@ -174,7 +175,7 @@ struct apply_sequence_t<L<Vs...>> {
174175 return f.template operator ()<Vs...>();
175176 }
176177};
177- template <template <typename , auto ...> typename L, typename T, T... Vs>
178+ template <template <typename X, X ...> typename L, typename T, T... Vs>
178179struct apply_sequence_t <L<T, Vs...>> {
179180 template <typename F> constexpr auto operator ()(F &&f) const {
180181 return f.template operator ()<Vs...>();
0 commit comments