Общие манипуляции с кортежами в HLS

Я пытаюсь использовать универсальный код манипулирования кортеж на основе примеров в этом блог, но используя только код C ++ 11 (Vivado HLS, похоже, не поддерживает C ++ 14). Приведенный ниже код вызывает сбой Vivado HLS 2018.1 с Abnormal program termination (11) ошибка.

#include <cassert>
#include <tuple>

// index_sequence from https://stackoverflow.com/questions/17424477/implementation-c14-make-integer-sequence/

template<size_t...> struct index_sequence{ typedef index_sequence type; };

template<class S1, class S2> struct concat;

template<size_t... I1, size_t... I2>
struct concat<index_sequence<I1...>, index_sequence<I2...>>
: index_sequence<I1..., (sizeof...(I1)+I2)...>
{};

template<size_t N> struct make_index_sequence;

template<size_t N>
struct make_index_sequence : concat<
typename make_index_sequence<N/2>::type,
typename make_index_sequence<N - N/2>::type
>
{};

template<> struct make_index_sequence<0> : index_sequence<>{};
template<> struct make_index_sequence<1> : index_sequence<0>{};

using namespace std;

template <typename Tuple, typename Seq>
struct tuple_map_type
{
typedef tuple<> type;
};

template <typename Tuple, size_t... Is>
struct tuple_map_type<Tuple, index_sequence<Is...> >
{
typedef tuple<typename tuple_element<Is, Tuple>::type...> type;
};

template <typename Tuple, size_t... Is>
constexpr typename tuple_map_type<Tuple, index_sequence<Is...> >::type
take_front_impl(Tuple t, index_sequence<Is...>)
{
return make_tuple(get<Is>(t)...);
}

template <size_t N, class Tuple>
constexpr typename tuple_map_type<Tuple, typename make_index_sequence<N>::type>::type take_front(Tuple t) {
return take_front_impl(t, make_index_sequence<N>{});
}

tuple<int, int> top(int a, int b, int c)
{
auto all = make_tuple(a, b, c);
return take_front<2>(all);
}

int main()
{
assert(top(1,2,3) == make_tuple(1, 2));
}

Есть ли обходной путь для HLS, который позволил бы такой универсальный код кортежа компилироваться с Vivado HLS?

РЕДАКТИРОВАТЬ: уточнить, что этот вопрос касается компилятора Vivado HLS. Я знаю, что код прекрасно работает со стандартными компиляторами, такими как g ++ и clang ++.

(Этот вопрос был также размещен на Xilinx HLS Community Forum.)

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]