@@ -33,7 +33,10 @@ struct intseq
3333
3434// join two intseqs
3535template <typename _Seq1, typename _Seq2>
36- struct intseq_join ;
36+ struct intseq_join
37+ {
38+ using type = std::false_type;
39+ };
3740
3841template <typename _Int, template <typename , _Int ...> class _IntSeq , _Int ... _I1, _Int ... _I2>
3942struct intseq_join <_IntSeq<_Int, _I1...>, _IntSeq<_Int, _I2...>>
@@ -47,28 +50,28 @@ using intseq_join_t = typename intseq_join<_Seq1, _Seq2>::type;
4750
4851// create intseq of given length
4952template <typename _Int, size_t _N>
50- struct make_intseq ;
53+ struct make_intseq
54+ {
55+ using type =
56+ typename intseq_join<typename make_intseq<_Int, _N - 1 >::type, intseq<_Int, _N - 1 >>::type;
57+ };
5158
5259template <typename _Int>
5360struct make_intseq <_Int, 0 >
5461{
5562 using type = intseq<_Int>;
5663};
5764
58- template <typename _Int, size_t _N>
59- struct make_intseq
60- {
61- using type =
62- typename intseq_join<typename make_intseq<_Int, _N - 1 >::type, intseq<_Int, _N - 1 >>::type;
63- };
64-
6565template <typename _Int, size_t _N>
6666using make_intseq_t = typename make_intseq<_Int, _N>::type;
6767
6868
6969// extract element from integer sequence
7070template <size_t _Idx, typename _Seq>
71- struct intseq_element ;
71+ struct intseq_element
72+ {
73+ static constexpr typename _Seq::value_type value = 0 ;
74+ };
7275
7376template <typename _Int, template <typename , _Int ...> class _IntSeq , _Int _I, _Int ... _Is>
7477struct intseq_element <0 , _IntSeq<_Int, _I, _Is...>>
@@ -79,9 +82,7 @@ struct intseq_element<0, _IntSeq<_Int, _I, _Is...>>
7982template <
8083 typename _Int,
8184 template <typename , _Int ...> class _IntSeq ,
82- _Int _I,
83- _Int ... _Is,
84- size_t _Idx>
85+ _Int _I, _Int ... _Is, size_t _Idx>
8586struct intseq_element <_Idx, _IntSeq<_Int, _I, _Is...>>
8687{
8788 static constexpr _Int value = intseq_element<_Idx - 1 , _IntSeq<_Int, _Is...>>::value;
@@ -94,7 +95,10 @@ struct intseq_element<_Idx, _IntSeq<_Int, _I, _Is...>>
9495
9596// sum an integer sequence
9697template <typename _Seq>
97- struct intseq_sum ;
98+ struct intseq_sum
99+ {
100+ static constexpr typename _Seq::value_type value = 0 ;
101+ };
98102
99103template <typename _Int, template <typename , _Int ...> class _IntSeq >
100104struct intseq_sum <_IntSeq<_Int>>
@@ -115,7 +119,10 @@ struct intseq_sum<_IntSeq<_Int, I, Is...>>
115119
116120// prefix-sum an integer sequence
117121template <typename _Int, typename _Collected, typename _Remaining, _Int Sum>
118- struct intseq_psum_impl ;
122+ struct intseq_psum_impl
123+ {
124+ using type = std::false_type;
125+ };
119126
120127template <
121128 typename _Int,
@@ -134,7 +141,10 @@ struct intseq_psum_impl<_Int, _IntSeq<_Int, _Cur...>, _IntSeq<_Int, _First, _Rem
134141{};
135142
136143template <class _Seq >
137- struct intseq_psum ;
144+ struct intseq_psum
145+ {
146+ using type = std::false_type;
147+ };
138148
139149template <typename _Int, template <typename , _Int ...> class _IntSeq , _Int ... _I>
140150struct intseq_psum <_IntSeq<_Int, _I...>>
0 commit comments