Код: Выделить всё
#include
struct A
{
A()
{
set( nullptr );
}
std::ptrdiff_t offset_;
void set( void* ptr )
{
offset_ = reinterpret_cast( ptr ) - reinterpret_cast( this );
}
void* get()
{
return reinterpret_cast( this ) + offset_;
}
};
int main()
{
A a;
int *b = static_cast( a.get() );
if( !b )
a.set( b = new int{ 10 } );
return *b;
}
Просматриваю ассемблер. Ссылка на Godbolt: https://godbolt.org/z/hrx3uc
Таким образом, вопрос:
это ошибка в GCC, о которой нужно сообщить или моя программа содержит некоторые Ub?
Подробнее здесь: https://stackoverflow.com/questions/601 ... timization
Мобильная версия