Partial application in C++
Looks like you are trying to re-invent std::bind.

#include &lt;functional&gt;
#include &lt;iostream&gt;


void test(int x, int y, int z) {
    std::cout &lt;&lt; "my first number is " &lt;&lt; x &lt;&lt; std::endl;
    std::cout &lt;&lt; "my second number is " &lt;&lt; y &lt;&lt; std::endl;
    std::cout &lt;&lt; "my favorite number is " &lt;&lt; z &lt;&lt; std::endl;
}

int main() {
    // Add placeholders for non bound values.
    using namespace std::placeholders;

    // Note the last argument is a place holder.
    auto f = std::bind(test, 5, 3, _1);

    // Now you can call and pass a placeholder argument.
    f(7);
}


As a side note: This is the kind of reason why underscore is reserved for the implementation to allow for little shortcuts like this without having to re-invent the language.

Rather than using recursive templates. I would have used an iterative aproach. With constexpr you can do quite a lot that is evaluated at compile time.

struct all_true
{
    template&lt;typename... T&gt;
    static bool constexpr isTrue(T... b)
    {   
        bool result = true;
        for(auto const&amp; a: {b...})
        {   
            result = result &amp;&amp; a;
        }   
        return result;
    }   
};

// Then your code looks like this:
b = all_true::isTrue(std::is_nothrow_constructible&lt;Args, Args&amp;&amp;&gt;::value...),