It's not "illegal" but it will not do what you think.
The third parameter is int depth but you passed in false as the third argument. What will happen is that depth will be assigned the value false, which becomes 0 when converted to an int. fullScreen will get the value true, because that is the default argument for fullScreen.
There is no technical reasons why second example in your (1) would be illegal. But it will make default argument useless and in all cases such declaration results from programmer mistake, so language authors decided to make such declaration illegal to help the programmer.