История изменений
Исправление alysnix, (текущая версия) :
Вот здесь: Герб Саттер – отчёт о встрече по стандартам ISO C++ в июне 2025 года (комментарий)
и пояснение текстом, и два работающих примера на godbolt, в которых видно изменение значения this.
Вам сто пицот раз говорили - проверить свои выводы не на бессмысленных рассуждалках с привлечением темлейтов и вирт функций, а ВОТ НА ЭТОМ КОДЕ.
struct A {
int _a;
};
struct B {
int _b;
void fun() {} /// ЖЫРНО ТАК - ВОТ ЭТУ ФУНКЦИЮ НАДО ВЫЗВАТЬ и смотреть сдвиг this!!!
};
///множ наследование
struct C0: public A, public B {
void test() { fun(); }
};
///просто встраивание
struct C1: public A {
B _b;
void test() { _b. fun(); }
};
Тут код упрощен до предела и функция, которую вызывать - только одна, чтобы вы опять не пошли по граблям.
А у вас - то вы вызываете разные функции с одним именем!!!, то пишете какие-то темплейты вызовов не пойми чего, то виртуальные функции(это опять физически разные функции!!!).
Зачем вам шаблоны, вы сначала разберитесь в тривиальном коде.
Исходная версия alysnix, :
Вот здесь: Герб Саттер – отчёт о встрече по стандартам ISO C++ в июне 2025 года (комментарий)
и пояснение текстом, и два работающих примера на godbolt, в которых видно изменение значения this.
Вам сто пицот раз говорили - проверить свои выводы не на бессмысленных рассуждалках с привлечением темлейтов и вирт функций, а ВОТ НА ЭТОМ КОДЕ.
struct A {
int _a;
};
struct B {
int _b;
void fun() {} /// ЖЫРНО ТАК - ВОТ ЭТУ ФУНКЦИЮ НАДО ВЫЗВАТЬ и смотреть сдвиг this!!!
};
///множ наследование
struct C0: public A, public B {
void test() { fun(); }
};
///просто встраивание
struct C1: public A {
B _b;
void bb() { _b. fun(); }
};
Тут код упрощен до предела и функция, которую вызывать - только одна, чтобы вы опять не пошли по граблям.
А у вас - то вы вызываете разные функции с одним именем!!!, то пишете какие-то темплейты вызовов не пойми чего, то виртуальные функции(это опять физически разные функции!!!).
Зачем вам шаблоны, вы сначала разберитесь в тривиальном коде.