Хм, мне пришлось немного покопаться во внутренностях струны ханы.
Но Хана восхитительно функциональна, так что этого короткого решения достаточно:
auto reverse_boost_hana_string = [](auto s) {
auto add_reverse = [=](auto xs, auto ys) {
auto ys_s = boost::hana::string<ys>(); // this is what I had wrong for a while
return ys_s + xs;
};
auto reversed = boost::hana::fold_left(s, BOOST_HANA_STRING(""), add_reverse);
return reversed;
};
int main()
{
auto s = BOOST_HANA_STRING("abcdef");
auto s2 = reverse_boost_hana_string(s);
std::cout << "Reversed ==>" << s2.c_str() << "<==\n";
}
Этосерьезно приятно писать TMP без шумов шаблона.