AT
Size: a a a
AT
VS
v
static_assert((uintptr_t)nullptr == 0); и тогда можно инициализировать указатели битовым нулем. То есть мне кажется, перевели из UB в implementation defined.S
static_assert((uintptr_t)nullptr == 0); и тогда можно инициализировать указатели битовым нулем. То есть мне кажется, перевели из UB в implementation defined.AT
m
struct S {
void* p;
};
S* s = reinterpret_cast<S*>(calloc(sizeof(int))); // note this memory guaranteed to be filled with zeros
assert(s->p == nullptr);
Такой код был UB. В 20ом стандарте UB нет, но срабатывание assert'а зависит от битового представления nullptr.AN
VS
static_assert((uintptr_t)nullptr == 0); и тогда можно инициализировать указатели битовым нулем. То есть мне кажется, перевели из UB в implementation defined.uintptr_t nullptr имеет представление 0. представление nullptr для всех остальных типов она никак не затрагиваетAN
S
ПК
0v
ПК