Предположим, у меня есть такой кортеж hana::integral_constant:
auto tuple_of_int_const = hana::make_tuple(hana::integral_constant<int,0>(),
hana::integral_constant<int,1>());
Теперь я пытаюсь создать кортеж constexpr из целых чисел следующим образом:
constexpr auto constexpr_tuple = hana::make_tuple(0,1);
Моя попытка:
#include "boost/hana.hpp"
using namespace boost;
auto tuple_of_int_const = hana::make_tuple(hana::integral_constant<int,0>(),
hana::integral_constant<int,1>());
constexpr auto tuple = hana::transform(tuple_of_int_const,[](auto x){ return x(); });
Проблема в том, что лямбда-выражения не являются constexpr ....... поэтому вопрос в следующем:
Как преобразовать кортеж integral_constant в лямбду constexpr?
Примечание:
Я использую C++ 14
@chris Мне очень жаль ... Я должен был заметить, что я использую C++ 14 ......... Я отредактирую, чтобы отразить это





Вы можете создать обычную функцию шаблона:
template <typename ... Ts>
constexpr auto tuple_transform(std::tuple<Ts...>)
{
return std::make_tuple(Ts{}()...);
}
Это идеально
Boost.Hana имеет функцию value_of как часть концепции Constant.
#include <boost/hana.hpp>
namespace hana = boost::hana;
int main() {
auto tuple_of_int_const = hana::make_tuple(hana::integral_constant<int,0>(),
hana::integral_constant<int,1>());
constexpr auto tuple = hana::transform(tuple_of_int_const, hana::value_of);
static_assert(hana::make_tuple(0, 1) == tuple, "");
}
Лямбды - это constexpr, когда это возможно в современном C++.