Commit 33e4a145 authored by Chris Peterson's avatar Chris Peterson
Browse files

Bug 1774522 - Make Skia C++20 compatible by replacing deprecated std::result_of_t. r=lsalzman

The C++ std library functions `std::result_of` and `std::result_of_t` were deprecated in C++17 and removed in C++20.

Upstream Skia removed use of `std::result_of_t` in 2021, so we can just copy upstream's new replacement code:

https://skia.googlesource.com/skia/+/7d8cdd5b7f277f3b661e1eea067cf45a467572c6%5E%21/
https://skia.googlesource.com/skia/+/dc976a96ea388ae49fd0ce18d5a07d8fc15779cf%5E%21/

Because we're just extracting code from upstream, our local changes here can be safely overwritten whenever we next vendor a new Skia version.

Differential Revision: https://phabricator.services.mozilla.com/D149490
parent 4caac3ac
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -38,8 +38,6 @@ template <typename T> using add_cv_t = typename std::add_cv<T>::type;
template <typename T> using add_pointer_t = typename std::add_pointer<T>::type;
template <typename T> using add_lvalue_reference_t = typename std::add_lvalue_reference<T>::type;

template <typename T> using result_of_t = typename std::result_of<T>::type;

template <typename... T> using common_type_t = typename std::common_type<T...>::type;

template <std::size_t... Ints> struct index_sequence {
+4 −4
Original line number Diff line number Diff line
@@ -442,14 +442,14 @@ private:
using SkAutoFree = std::unique_ptr<void, SkFunctionWrapper<void(void*), sk_free>>;

template<typename C, std::size_t... Is>
constexpr auto SkMakeArrayFromIndexSequence(C c, skstd::index_sequence<Is...>)
-> std::array<skstd::result_of_t<C(std::size_t)>, sizeof...(Is)> {
constexpr auto SkMakeArrayFromIndexSequence(C c, std::index_sequence<Is...> is)
-> std::array<decltype(c(std::declval<typename decltype(is)::value_type>())), sizeof...(Is)> {
    return {{ c(Is)... }};
}

template<size_t N, typename C> constexpr auto SkMakeArray(C c)
-> std::array<skstd::result_of_t<C(std::size_t)>, N> {
    return SkMakeArrayFromIndexSequence(c, skstd::make_index_sequence<N>{});
-> std::array<decltype(c(std::declval<typename std::index_sequence<N>::value_type>())), N> {
    return SkMakeArrayFromIndexSequence(c, std::make_index_sequence<N>{});
}

#endif