I was recently made aware of D's Uniform Function Call Syntax (UFCS) which is similar but not exactly the same:
void sun(T, int);
void moon(T t)
{
t.sun(1);
// If `T` does not have member function `sun`,
// `t.sun(1)` is interpreted as if it were written `sun(t, 1)`
}
The nice thing here is that no placeholder like % is needed and it still works with functions that expect multiple parameters.