void my_function(int it=42, ...)
Вы сказали, что эта функция прекрасно компилируется с GCC, но вы не можете использовать аргумент по умолчанию, вам также придется передать аргумент для так называемого параметра по умолчанию, чтобы работать с этой функцией.
my_function("string", 98, 78, 99); //error
my_function(898, "string", 98, 78, 99); //ok, but the param 'it' becomes 898
Задайте себе вопрос:
Первый аргумент 898
соответствует параметру it
или соответствует параметру переменной (и вы собираетесь использовать значение по умолчанию 42
для it
)?
Компилятор не может знать ваше намерение!
Кстати, Йоханнес указал на хороший момент: вы можете просто позвонить my_function()
, не передавая никаких аргументов. Это единственный случай, когда я могу использовать аргумент по умолчанию.
Теперь, если вы измените положение параметра по умолчанию, примерно так:
void f(..., int p = 10); //illegal
Тогда для C ++ это недопустимо.
Опять спросите себя: если бы это было разрешено, то вы могли бы назвать это как:
f(9879, 97897, 7897);
Последний аргумент 7897
соответствует параметру p
или соответствует параметру variadic (и вы собираетесь использовать значение по умолчанию 10
для p
)?
Компилятор также не может знать ваше намерение в этом случае.