12namespace tag_invoke_fn_ns {
17#if defined(_MSC_VER) || (defined(__GNUC__) && __GNUC__ < 12 && !defined(__clang__))
24 template <
typename Tag,
typename... Args>
25 requires requires(Tag tag, Args &&...args) {
30 std::forward<Args>(args)...)))
32 std::forward<Args>(args)...)) {
40inline namespace tag_invoke_ns {
44template <
typename Tag,
typename... Args>
49template <
typename Tag,
typename... Args>
51 tag_invocable<Tag, Args...> &&
requires(Tag tag, Args... args) {
54 std::forward<Args>(args)...)
58template <
typename Tag,
typename... Args>
61template <
typename Tag,
typename... Args>
65template <
typename Tag,
typename... Args>
69template <typename Tag, typename... Args>
74using tag_t = std::decay_t<
decltype(Tag)>;
void alpaqa_tag_invoke()=delete
Poison pill to hide overloads of foo() that might be found in parent namespace.
constexpr tag_invoke_fn_ns::tag_invoke_fn alpaqa_tag_invoke
std::decay_t< decltype(Tag)> tag_t
std::invoke_result_t< decltype(::alpaqa::alpaqa_tag_invoke), Tag, Args... > tag_invoke_result_t
constexpr bool is_tag_invocable_v
constexpr bool is_nothrow_tag_invocable_v
std::invoke_result< decltype(::alpaqa::alpaqa_tag_invoke), Tag, Args... > tag_invoke_result
constexpr auto operator()(Tag tag, Args &&...args) const noexcept(noexcept(alpaqa_tag_invoke(std::move(tag), std::forward< Args >(args)...))) -> decltype(alpaqa_tag_invoke(std::move(tag), std::forward< Args >(args)...))