Piping operator in c++
That seems a worthwhile objective.  The syntax looks a bit clunky when we have to write lambdas inline like that, but you'll probably develop a library of useful filters (like standard Ranges ones) that look much more natural.
I don't think we've got the use of forwarding references quite right - and you'll be pleased to hear that fixing that should simplify the code a bit.
What we should do is use typename Any&amp;&amp;.  Although that looks like an rvalue-reference, it's actually a forwarding reference because Any is a template parameter.
Any&amp;&amp; allows the template parameter to bind to either lvalue or rvalue, so we just need the one function:
template &lt;typename Any&gt;
auto operator| (Any&amp;&amp; obj, std::invocable&lt;Any&gt; auto&amp;&amp; func) {
    return func(std::forward&lt;Any&gt;(obj));
}

(Note also the auto&amp;&amp; for func, so it can be a mutable functor if we want).

Having written that, I'm not so convinced that I like operator|() to be modifying its argument.  I would prefer a | b to leave a alone, and have to write a |= b when I intend a to be modified in place.

Minor points:

There are headers included but not needed for the template:

#include &lt;vector&gt;
#include &lt;iostream&gt;
#include &lt;deque&gt;



inline is implicit for a template function.
We don't need to spell out the full return type for the &quot;append 7&quot; lambda in the example - -&gt; auto&amp; is easier.