Передача не-PODs в переменные функции аргументов, такие как printf, - это поведение undefined (1, 2), но я не понимаю, почему стандарт С++ был установлен таким образом. Есть ли что-то, что присуще переменным функциям arg, которое мешает им принимать классы в качестве аргументов?
Вызывающая переменная-arg действительно ничего не знает о своем типе - но и не знает ничего о встроенных типах или простых POD, которые она принимает.
Кроме того, они обязательно являются функциями cdecl, поэтому вызывающий может быть ответственным, например. для копирования их при прохождении и уничтожении их по возвращении.
Любое понимание будет оценено.
EDIT: я по-прежнему не вижу причин, по которым предлагаемая вариационная семантика не будет работать, но ответ zneak хорошо показывает, что потребуется, чтобы настроить компиляторы на нее, - поэтому я принял ее. В конечном счете, это может быть некоторый исторический сбой.