Is there a reason why template parameters can default to other template parameters, but not regular parameters? For instance: // OK int foo(int x, int y = x)() { return x*y; } // Not OK int foo(int x, int y = x) { return x*y; } When I noticed this it seemed arbitrary, but maybe there's a reason?