Tytuł mówi wszystko. Zamierzam dodać argument do funkcji składowej klasy z wartością domyślną. Argument jest nietrywialny. Czy to łamie ABI? Załóżmy, że moja nowa wersja biblioteki ma być M.m.0
i powinna być dostępna jako zamiennik dla wszystkich połączonych aplikacji, które używają M.m-1.x
.Czy dodanie argumentów z wartościami domyślnymi do funkcji łamie ABI?
Przykładowy kod:
// 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: Zrobiłem mój własny test, i to działa. Po prostu nie można być pewnym:
Nazwa mówi wszystko. Domyślne argumenty to * argumenty * i nie mają nic wspólnego z typem funkcji (w szczególności z parametrami funkcji). –
_ "Czy to łamie ABI w tył?" Przykro mi? –
'do_that_stuff' otrzyma inną zniekształconą nazwę w starych i nowych kompilacjach - myślę, że łamie moją definicję kompatybilności ABI. –