Haskell-like function composition function
There's no need to use a struct compose_t to wrap operator(), you can just move operator() out of it and rename it compose():
template &lt;typename F, typename G&gt;
constexpr decltype(auto) compose(F&amp;&amp; f, G&amp;&amp; g) noexcept {
    return [&amp;f,&amp;g](auto&amp;&amp; x){
        return f(g(std::forward&lt;decltype(x)&gt;(x)));
    };
}

Now it is also much closer to the code written in this post you mentioned, except of course you are limited to composing only two unary functions.
Other than that, if you can live with the restrictions you have, I see nothing wrong with your implementation.