#include <iostream>
#include <utility>

template <typename T>
struct N;

template <typename T, typename ... F>
struct N<T(F...)> {
    T operator()(T (&t)(F...), F&&... f) {
       return t(std::forward<F>(f)...);
    }
};

template <typename ... T> void operator<< (std::ostream &, const N<void(T...)> &) {}

void f(int a, int b) {}

int main() {
    
    N<void(int, int)> bind;
    
    std::cout << bind(f, 5, 5);
    
}