I've always thought of default arguments to be plain syntactic sugar, so for void f(int i, int j=5) f(1) is simply transformed to f(1,5) and the rest is the same.