Either monad in C++11
Your Either-monad suffers from a fatal flaw:
It is impossible to return an Either which might be either possibility.
You can only return a Left or a Right, an Either must per force be a pointer or reference to one of those.
Without help from the compiler in automatically deducing a return-type of Either&lt;T, U&gt; if it finds returns of a combination of Either&lt;T, U&gt;, Left&lt;T&gt; and Right&lt;U&gt; sufficient to deduce T and U, or at least adding pattern-matching, Left and Right are pretty much useless.
In the end, that just leaves Either, which is now only a poor-mans substitute for full-fledged std::variant of two.