Re[24]: Когда это наконец станет defined behavior?
От: so5team https://stiffstream.com
Дата: 05.05.23 09:29
Оценка:
Здравствуйте, rg45, Вы писали:

R>В данном сценарии то, что происходит внутри bar — это откровенный говнокод.


В связи с тем, что можно прочитать по ссылке от ув.σ (https://timsong-cpp.github.io/cppwp/n4868/ptr.launder#example-1):
struct X { int n; };
const X *p = new const X{3};
const int a = p->n;
new (const_cast<X*>(p)) const X{5}; // p does not point to new object ([basic.life]) because its type is const
const int b = p->n;                 // undefined behavior
const int c = std::launder(p)->n;   // OK

я уже не могу позволить себе быть столь категоричным.

Меня даже больше интересует, а не нужно ли после возвращения из bar вот здесь:
int foo() {
    const S s{1};
    int i1 = s.i;
    bar(s);
    int i2 = s.i; // (1)
    return i1 + i2;
}

сделать std::launder в точке (1). Поскольку lifetime для объекта s закончился внутри bar...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.