C++ lazy constructor
I think you can really simplify your code with the use of lambdas.

template&lt;typename T, typename... Args&gt;
auto make_lazy(Args&amp;&amp;... args)
{
    return [=]{return T(std::move(args)...);};
}


Usage example:

#include &lt;iostream&gt;
class T
{
    int v;
    public:
        T(int v): v(v) {std::cout &lt;&lt; "Building T\n";}
        friend std::ostream&amp; operator&lt;&lt;(std::ostream&amp; s, T const&amp; out) {return s &lt;&lt; "T: " &lt;&lt; out.v &lt;&lt; "\n";}
};
class S
{
    int v;
    public:
        S(int v): v(v) {std::cout &lt;&lt; "Building S\n";}
        friend std::ostream&amp; operator&lt;&lt;(std::ostream&amp; s, S const&amp; out) {return s &lt;&lt; "S: " &lt;&lt; out.v &lt;&lt; "\n";}
};

template&lt;typename T, typename... Args&gt;
auto make_lazy(Args&amp;&amp;... args)
{
    return [=]{return T(std::move(args)...);};
}

int main()
{
    auto lazyT = make_lazy&lt;T&gt;(1);
    auto lazyS = make_lazy&lt;S&gt;(2);

    std::cout &lt;&lt; "Building\n";
    std::cout &lt;&lt; lazyT() &lt;&lt; "\n";
    std::cout &lt;&lt; lazyS() &lt;&lt; "\n";
}