Название говорит все. Я собираюсь добавить аргумент в функцию-член класса со значением по умолчанию. Аргумент имеет нетривиальный тип. Это нарушает ABI? Допустим, моя новая версия библиотеки будет M.m.0
и он должен быть доступен в качестве замены для всех связанных приложений, которые используют M.m-1.x
,
Образец кода:
// These are some classes: base and child : public base
/* Version 1.2.3 */
class foo() {
public:
void do_that_stuff(const std::string a);
}
/* Version 1.3.0 */
class foo() {
public:
void do_that_stuff(const std::string a, const base& b = base());
}
PS: я сделал свой собственный тест, и он работает. Просто не могу быть уверен
Большинство C ++ ABI кодируют типы аргументов функций [member] в имени символа. Аргументы по умолчанию обычно реализуются как временные объекты, вызываемые в точке вызова. Если это выбор, сделанный для используемого ABI, добавление аргумента по умолчанию изменит ABI. Так ли это, вам нужно определить, какой конкретный ABI используется.
Других решений пока нет …