clang выдает предупреждение, которое я не понимаю в этом контексте. Кажется, что указатель выровнен по 8 байтам, но clang жалуется на то, что он выровнен по 4 байтам.
Чтобы это исправить, я могу привести его к тому же типу, что и указатель, который кажется излишним.
Что мне здесь не хватает? Что мне следует прочитать/понять и есть ли способ это исправить?
#include
typedef struct
{
int type;
} type_t __attribute__ ((aligned (8))); // 3rd party
void doNothing(type_t*) { }
int main() {
auto up = std::unique_ptr(nullptr);
auto raw_ptr = up.get();
static_assert(alignof(type_t*) == 8);
static_assert(alignof(decltype(raw_ptr)) == 8);
doNothing(raw_ptr); // compile error: passing 4-byte aligned argument to 8-byte aligned parameter
doNothing(reinterpret_cast(raw_ptr)); // ok with cast
}
Подробнее здесь: https://stackoverflow.com/questions/786 ... er-warning
Использование std::unique_ptr с выровненным типом приводит к предупреждению компилятора. ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение