ideas
ideas copied to clipboard
Добавить проверку на выравнивание в std::start_lifetime_as
Хотелось иметь возможность получения ошибки/предупреждения на этапе компиляции если структура является выровненной, а реальный размер отличается и нет никаких #pragm и __attribute__.
Например:
// Case 1
struct ProtocolHeader {
unsigned char version;
unsigned char msg_type;
unsigned char chunks_count;
};
...
// sizeof (ProtocolHeader) = 3;
ProtocolHeader hdr = std::start_lifetime_as<ProtocolHeader>(data_from_net.data()); // OK
...
// Case 2
struct ProtocolHeader2 {
unsigned int id;
unsigned char version;
unsigned char msg_type;
unsigned char chunks_count;
};
...
// sizeof (ProtocolHeader2) = 8;
ProtocolHeader2 hdr = std::start_lifetime_as<ProtocolHeader2>(data_from_net.data()); // ERROR: Структура выровнена sizeof (ProtocolHeader2) = 8, размер данных = 7 (или что-то в этом роде...)
...
// Case 3
struct ProtocolHeader3 {
unsigned int id;
unsigned char version;
unsigned char msg_type;
unsigned char chunks_count;
} __attribute__ ((__packed__));
...
// sizeof (ProtocolHeader3) = 7;
ProtocolHeader3 hdr = std::start_lifetime_as<ProtocolHeader3>(data_from_net.data()); // OK
...