std::indirect_result_t(3)

πŸ“¦ version 2024.07.05, in nixpkgs unstable, opensuse-leap 16.0

πŸ’… NAME

std::indirect_result_t β€” std::indirect_result_t (yes bestie, she’s self-titled πŸ’…). okay so this is the alias template that gets the result type of invoking an invocable F on the dereferenced results of indirectly_readable types Is.... It’s giving type-level matchmaking, no cap.

🌸 Synopsis 🌸

Defined in header <iterator> πŸŽ€

template< class F, class... Is >

    requires (std::indirectly_readable<Is> && ...) &&
              std::invocable<F, std::iter_reference_t<Is>...>

(since C++20) ✨

using indirect_result_t = std::invoke_result_t<F,
std::iter_reference_t<Is>...>;

The alias template indirect_result_t obtains the result type of invoking an invocable type F on the result of dereferencing indirectly_readable types Is.... literally that’s the whole vibe.

πŸŽ€ Template parameters πŸŽ€

  • F β€” an invocable type (the callable bestie doing the invoking)
  • Is β€” indirectly readable types that are dereferenced to arguments (the deref’d cuties handed over as arguments)

✨ Example ✨

run this code, bestie:

// Run this code

#include <iterator>
#include <type_traits>

struct Fn
{
    long operator()(const int&);
    int operator()(int&&);
    short operator()(int, int) const;
    auto operator()(const float) -> int&;
    void operator()(int[8]);
};

static_assert(
    std::is_same_v<std::indirect_result_t<Fn, const int*>, long> and
    std::is_same_v<std::indirect_result_t<Fn,
        std::move_iterator<int*>>, int> and
    std::is_same_v<std::indirect_result_t<const Fn, int*, int*>, short>
    and
    std::is_same_v<std::indirect_result_t<Fn, float*>, int&> and
    std::is_same_v<std::indirect_result_t<Fn, int**>, void>
);

int main() {}

🌈 See also 🌈

  • result_of β€” deduces the result type of invoking a callable object with a set of arguments; (C++11)(removed in C++20) (class template)
  • invoke_result β€” deduces the result type of invoking a callable object with a set of arguments; (C++17)

πŸ’– source/version: http://cppreference.com Β· date: 2024.06.10 β€” footer folded into a cute sign-off, mwah! 🫢✨

πŸ“¦ where this page comes from