17 template<
class A1,
class Op,
class A2>
18 constexpr auto infixr(A1&& a1, Op&& op, A2&& a2)
19 noexcept(
noexcept(std::invoke(std::forward<Op>(op), std::forward<A1>(a1), std::forward<A2>(a2))))
20 ->
decltype( std::invoke(std::forward<Op>(op), std::forward<A1>(a1), std::forward<A2>(a2)))
21 {
return std::invoke(std::forward<Op>(op), std::forward<A1>(a1), std::forward<A2>(a2)); }
24 template<
class A1,
class Op,
class... Args>
25 constexpr auto infixr(A1&& a1, Op&& op, Args&&... args)
26 noexcept(
noexcept(std::invoke(std::forward<Op>(op), std::forward<A1>(a1),
infixr(std::forward<Args>(args)...))))
27 ->
decltype( std::invoke(std::forward<Op>(op), std::forward<A1>(a1),
infixr(std::forward<Args>(args)...)))
28 {
return std::invoke(std::forward<Op>(op), std::forward<A1>(a1),
infixr(std::forward<Args>(args)...)); }
38 template<
class A1,
class Op,
class A2>
39 constexpr auto infixl(A1&& a1, Op&& op, A2&& a2)
40 noexcept(
noexcept(std::invoke(std::forward<Op>(op), std::forward<A1>(a1), std::forward<A2>(a2))))
41 ->
decltype( std::invoke(std::forward<Op>(op), std::forward<A1>(a1), std::forward<A2>(a2)))
42 {
return std::invoke(std::forward<Op>(op), std::forward<A1>(a1), std::forward<A2>(a2)); }
45 template<
class A1,
class Op,
class A2,
class... Args>
46 constexpr auto infixl(A1&& a1, Op&& op, A2&& a2, Args&&... args)
47 noexcept(
noexcept(
infixl(std::invoke(std::forward<Op>(op), std::forward<A1>(a1), std::forward<A2>(a2)), std::forward<Args>(args)...)))
48 ->
decltype(
infixl(std::invoke(std::forward<Op>(op), std::forward<A1>(a1), std::forward<A2>(a2)), std::forward<Args>(args)...))
49 {
return infixl(std::invoke(std::forward<Op>(op), std::forward<A1>(a1), std::forward<A2>(a2)), std::forward<Args>(args)...); }
constexpr auto infixl(A1 &&a1, Op &&op, A2 &&a2) noexcept(noexcept(std::invoke(std::forward< Op >(op), std::forward< A1 >(a1), std::forward< A2 >(a2)))) -> decltype(std::invoke(std::forward< Op >(op), std::forward< A1 >(a1), std::forward< A2 >(a2)))
Implements the left-associative infix notation.
Definition: infix.hpp:39
constexpr auto infixr(A1 &&a1, Op &&op, A2 &&a2) noexcept(noexcept(std::invoke(std::forward< Op >(op), std::forward< A1 >(a1), std::forward< A2 >(a2)))) -> decltype(std::invoke(std::forward< Op >(op), std::forward< A1 >(a1), std::forward< A2 >(a2)))
Implements the right-associative infix notation.
Definition: infix.hpp:18