Использование std::unique_ptr с выровненным типом приводит к предупреждению компилятора.C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Использование std::unique_ptr с выровненным типом приводит к предупреждению компилятора.

Сообщение Anonymous »

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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»