Код: Выделить всё
templateКод: Выделить всё
**Input**: std::tuple std::tuple
**Expected output**: Cartesian product of the two tuples:
std::tuple
Код: Выделить всё
template
class CartesianProduct {
protected:
CartesianProduct() = delete;
CartesianProduct(CartesianProduct const&) = delete;
CartesianProduct(CartesianProduct&&) = delete;
CartesianProduct& operator=(CartesianProduct const&) = delete;
CartesianProduct& operator=(CartesianProduct&&) = delete;
template
static constexpr auto innerHelper(T, std::tuple) noexcept {
return std::make_tuple(std::make_tuple(T{}, Ts{}) ...);
}
template
static constexpr auto outerHelper(std::tuple, T) noexcept {
return std::tuple_cat(innerHelper(Ts{}, T{}) ...);
}
public:
using type = std::decay_t;
};
template
using CartesianProduct_t = typename CartesianProduct::type;
Код: Выделить всё
privateМожно ли снять ограничение на конструктивность по умолчанию, не обращаясь к std::integer_sequence и дополнительному вспомогательному классу? Насколько я понимаю, невозможно использовать std::declval() непосредственно в методах InternalHelper и externalHelper (что решило бы мою проблему), так как это, похоже, больше не является неоцененным выражением. По крайней мере, GCC тогда жалуется на сбой статического утверждения: declval() нельзя использовать!, хотя с Clang он, похоже, нормально компилируется.
Заранее спасибо!
Подробнее здесь: https://stackoverflow.com/questions/704 ... f-stdtuple
Мобильная версия