ideas icon indicating copy to clipboard operation
ideas copied to clipboard

Добавить проверку на выравнивание в std::start_lifetime_as

Open John-Jasper-Doe opened this issue 3 years ago • 0 comments

Хотелось иметь возможность получения ошибки/предупреждения на этапе компиляции если структура является выровненной, а реальный размер отличается и нет никаких #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
...

John-Jasper-Doe avatar Aug 01 '22 14:08 John-Jasper-Doe