一応

コードと実行結果を。

import std.c.stdio;

class Curry(T, X, Y){
    this(int x0, T delegate(X x, Y y) f0){
        x = x0;
        f = f0;
    }

    T opCall(Y y){
        return f(x, y);
    }

private:
    X x;
    T delegate(X x, Y y) f;
}

void main(){
    int hoge(int x, int y){ return x + y; }
    Curry!(int, int, int) f = new Curry!(int, int, int)(3, &hoge);
    Curry!(int, int, int) y = f;
    printf("%d, %d\n", f(4), y(2));
}
7, 3

そういえばこれだと返り値ない関数で出来ないなあ…