, Это было бы хорошим дополнением к Hana, чтобы сделать их заказчиками, потенциальная ловушка в том, что порядок может в конечном итоге зависеть от платформы / компилятора.

отрим следующую программу:

#include <tuple>
#include <vector>
#include <iostream>
#include <type_traits>

template <class T>
struct ordered {};

template <class... T>
struct ordered<std::tuple<T...>>
{
    using type = /* a reordered tuple */;
};

template <class T>
using ordered_t = typename ordered<T>::type;

int main(int argc, char* argv[])
{
    using type1 = std::tuple<char, std::vector<int>, double>;
    using type2 = std::tuple<std::vector<int>, double, char>;
    std::cout << std::is_same_v<type1, type2> << "\n"; // 0
    std::cout << std::is_same_v<ordered_t<type1>, ordered_t<type2>> << "\n"; // 1
    return 0;
}

ordered Помощник должен переупорядочить типы в кортеже, так что два кортежа с одинаковыми типами, но упорядоченными по-разному, приводят к одному и тому же типу кортежа: это может быть первый, второй или даже другой: он просто должен иметь тот же размер и те же элементы, но в уникальном порядке (независимо от этого порядка).

Можно ли сделать это во время компиляции, используя методы метапрограммирования шаблонов?

Ответы на вопрос(1)

Ваш ответ на вопрос