Нужно стандартизировать девиртуализацию - то есть оптимизацию, когда делается явный вызов метода объекта полиморфического класса без диспетчеризации (т.е. просмотра vtable), если компилятор может доказать, что 100% будет вызван именно этот метод.
Самый важный для меня кейс - это девиртуализация вызова виртуального деструктора для объекта на стеке. Для всех объектов на стеке можно девиртуализовать все вызовы, в том числе деструктор.
Если это стандартизировать, это даст возможность компилятору автоматически делать деструктор виртуальным (если в классе есть виртуальные методы), это уберет вероятность UB.
Тогда не будет такой тупости, что все пишут virtual ~Foo() = default, это сделает компилятор за них.
Нужно стандартизировать девиртуализацию - то есть оптимизацию, когда делается явный вызов метода объекта полиморфического класса без диспетчеризации (т.е. просмотра vtable), если компилятор может доказать, что 100% будет вызван именно этот метод.
Условия для девиртуализации строгие - например в одном из кейсов класс должен быть помечен final, и мы должны иметь дело со ссылкой на этот класс. Об этом круче всего написано в этой статье - https://blog.feabhas.com/2022/11/using-final-in-c-to-improve-performance/
Самый важный для меня кейс - это девиртуализация вызова виртуального деструктора для объекта на стеке. Для всех объектов на стеке можно девиртуализовать все вызовы, в том числе деструктор. Если это стандартизировать, это даст возможность компилятору автоматически делать деструктор виртуальным (если в классе есть виртуальные методы), это уберет вероятность UB. Тогда не будет такой тупости, что все пишут
virtual ~Foo() = default
, это сделает компилятор за них.У меня есть микро-статья на эту тему - https://t.me/cxx95/67.