Здравствуйте, vopl, Вы писали:
V>>До С++17 некоторые компиляторы падают во время исполнения, некоторые выдают мусор. ))
V>Эта суть понятна в полной мере.
Вывод был
0, 1
1, 2
Хотя компилятор мог бы закешировать значения index в регистрах или вообще расположить экземпляры объектов в регистрах, ведь их размер это позволяет.
Т.е., программа могла выдать и
0, 1
1, 2
и
0, 0
0, 0
и просто упасть, если бы компилятор "не обратил внимание" на протекающий this.
V>По прежнему имею мнение что сабжевый "гипотетический UB" имеет такую же природу, но несколько другой механизм активации
Сабжевый ваш UB другой, имеет природу недоинициализированных глобальных переменных в динамической фазе инициализации.
Это очень старый UB, который живёт с самых первых версий С++, когда о RVO еще не слышали. ))
Этот ваш UB легко воспроизводим и без константности.