Здравствуйте, vdimas, Вы писали:
V>Здравствуйте, vopl, Вы писали:
V>>>Или собственное непонимание, ведь стандарт описан не для домохозяек, а для специалистов с неким ненулевым бэкграундом.
V>>у вас тут секта грубиянов чтоли?
V>Дык, вы ж не показали понимание прочитанного в стандарте.
Ну так это же не повод навешивать ярлыки. Если есть возможность — укажи на ошибку конкретно, я только благодарен буду
V>Давай я покажу тебе суть того UB, на который вы ссылаетесь, где этот UB можно получить безо-всяких реинтерпретаций/хаков:
V>V>#include <vector>
V>#include <iostream>
V>class SomeObj;
V>class Registrar {
V> std::vector<SomeObj*> regs_;
V> int index {};
V>public:
V> void registerObj(SomeObj * obj);
V> void incrementAll();
V>};
V>class SomeObj {
V>public:
V> SomeObj(Registrar & reg) {
V> reg.registerObj(this);
V> }
V> int index {};
V>};
V>void Registrar::registerObj(SomeObj * obj) {
obj->>index = index++;
V> regs_.push_back(obj);
V>}
V>void Registrar::incrementAll() {
V> for(auto * obj : regs_)
obj->>index++;
V>}
V>Registrar registrar;
V>int main() {
V> const SomeObj obj1 = SomeObj(registrar);
V> const SomeObj obj2 = SomeObj(registrar);
V> std::cout << obj1.index << ", " << obj2.index << std::endl;
V> registrar.incrementAll();
V> std::cout << obj1.index << ", " << obj2.index << std::endl;
V>}
V>
V>Из конструктора SomeObj протекла неконстантная отсылка к this.
V>Выведет:
V>V>0, 1
V>1, 2
V>
V>До С++17 некоторые компиляторы падают во время исполнения, некоторые выдают мусор. ))
Эта суть понятна в полной мере. По прежнему имею мнение что сабжевый "гипотетический UB" имеет такую же природу, но несколько другой механизм активации