GuillaumeDua / CppShelf

Collection of powerfuls - C++ Single-Header Libraries Files
https://guillaumedua.github.io/CppShelf/
MIT License
9 stars 1 forks source link

[AG] tuple to aggregate picky factory/conversion #201

Open GuillaumeDua opened 5 months ago

GuillaumeDua commented 5 months ago

https://godbolt.org/z/zzbn64s9e

template <typename T>
[[nodiscard]] auto make_aggregate_from_tuple(auto && tuple_like){
    static_assert(csl::ag::concepts::aggregate<T>);
    static_assert(csl::ag::concepts::tuple_like<std::remove_cvref_t<decltype(tuple_like)>>);

    // better-error: tuple_like contains csl::ag::element_t<indexes, T>
    return [&tuple_like]<std::size_t ... indexes>(std::index_sequence<indexes...>){
        return T {
            std::get<csl::ag::element_t<indexes, T>>(csl_fwd(tuple_like))...
        };
    }(std::make_index_sequence<csl::ag::size_v<T>>{});
}