Download build/_deps/metal-src/example/src/sfinae.cpp from camenduru/thrust: direct link, hf CLI and curl.
- Browser
- Download file 3.83 kB
-
https://huggingface.co/camenduru/thrust/resolve/main/build/_deps/metal-src/example/src/sfinae.cpp
- Command line
-
hf download hf://camenduru/thrust/build/_deps/metal-src/example/src/sfinae.cpp
-
curl -L -o sfinae.cpp https://huggingface.co/camenduru/thrust/resolve/main/build/_deps/metal-src/example/src/sfinae.cpp
3.83 kB
| /// [make_array] | |
| template<class... Xs, | |
| class R = std::array<std::common_type_t<Xs...>, sizeof...(Xs)> | |
| > | |
| constexpr R make_array(Xs&&... xs) { | |
| return R{{std::forward<Xs>(xs)...}}; | |
| } | |
| /// [make_array] | |
| /// [tuples] | |
| using namespace std::chrono; | |
| using namespace std::literals::chrono_literals; | |
| using namespace std::literals::complex_literals; | |
| auto tup1 = std::make_tuple(42ns, 0x42, 42.f); | |
| auto tup2 = std::make_tuple(42us, 042L, 42.L); | |
| auto tup3 = std::make_tuple(42ms, 42LL, 42.i); | |
| /// [tuples] | |
| /// [naive_array_of_tuples] | |
| auto array_of_tuples = make_array(tup1, tup2, tup3); | |
| /// [naive_array_of_tuples] | |
| namespace hana { | |
| /// [hana_common_tuple_t] | |
| template<class... xs> | |
| using hana_common_tuple_t = typename decltype( | |
| boost::hana::unpack( | |
| boost::hana::zip_with( | |
| boost::hana::template_<std::common_type_t>, | |
| boost::hana::zip_with(boost::hana::decltype_, std::declval<xs>())... | |
| ), | |
| boost::hana::template_<std::tuple> | |
| ) | |
| )::type; | |
| /// [hana_common_tuple_t] | |
| /// [hana_make_array_of_tuples] | |
| template<class... Xs, | |
| class R = std::array<std::common_type_t<Xs...>, sizeof...(Xs)> | |
| > | |
| constexpr R hana_make_array(Xs&&... xs) { | |
| return R{{std::forward<Xs>(xs)...}}; | |
| } | |
| template<class Head, class... Tail, | |
| class R = std::array<hana_common_tuple_t<std::decay_t<Head>, std::decay_t<Tail>...>, 1 + sizeof...(Tail)> | |
| > | |
| constexpr R hana_make_array(Head&& head, Tail&&... tail) { | |
| return R{{std::forward<Head>(head), std::forward<Tail>(tail)...}}; | |
| } | |
| /// [hana_make_array_of_tuples] | |
| /// [hana_array_of_tuples] | |
| auto array_of_tuples = hana_make_array(tup1, tup2, tup3); | |
| IS_SAME(decltype(array_of_tuples), std::array<std::tuple<nanoseconds, long long, std::complex<double>>, 3>); | |
| /// [hana_array_of_tuples] | |
| /// [hana_array_of_numbers] | |
| IS_SAME(decltype(hana_make_array(42, 42L, 42LL)), std::array<long long, 3>); | |
| /// [hana_array_of_numbers] | |
| } | |
| namespace | |
| { | |
| /// [common_tuple_t] | |
| template<class... xs> | |
| using common_tuple_t = metal::apply< | |
| std::common_type_t<metal::lambda<std::tuple>, metal::as_lambda<xs>...>, | |
| metal::transform<metal::lambda<std::common_type_t>, metal::as_list<xs>...> | |
| >; | |
| /// [common_tuple_t] | |
| /// [make_array_of_tuples] | |
| template<class... Xs, | |
| class R = std::array<std::common_type_t<Xs...>, sizeof...(Xs)> | |
| > | |
| constexpr R make_array(Xs&&... xs) { | |
| return R{{std::forward<Xs>(xs)...}}; | |
| } | |
| template<class Head, class... Tail, | |
| class R = std::array<common_tuple_t<std::decay_t<Head>, std::decay_t<Tail>...>, 1 + sizeof...(Tail)> | |
| > | |
| constexpr R make_array(Head&& head, Tail&&... tail) { | |
| return R{{std::forward<Head>(head), std::forward<Tail>(tail)...}}; | |
| } | |
| /// [make_array_of_tuples] | |
| /// [array_of_tuples] | |
| auto array_of_tuples = make_array(tup1, tup2, tup3); | |
| IS_SAME(decltype(array_of_tuples), std::array<std::tuple<nanoseconds, long long, std::complex<double>>, 3>); | |
| /// [array_of_tuples] | |
| /// [array_of_numbers] | |
| IS_SAME(decltype(make_array(42, 42L, 42LL)), std::array<long long, 3>); | |
| /// [array_of_numbers] | |
| } | |