четверг, 20 октября 2016 г. пользователь Louis Dionne написал:
Quick question: In the documentation, you say
C++14 limitations (C++17 fixes those): * T must be POD and must not contain references nor bitfields * T must not contain pointers to user defined types Enums will be returned as their underlying type All the methods that provide access to filds have a reinterpret_cast to an unrelated type. All the possible efforts and compiler scpecific tricks were used to avoid issues. But strictly speaking this is an Undefined Behavior.
How does C++17 fix the last point about UB?
In C++17 structured binding is used instead of a reinterpret_cast: instead of forming an unrelated type with same layout and reinterpret_casting user provided variable to that type, in C++17 fields count in user provided type is detected and structured binding for that particular fields count is used on a user provided variable, then a tuple of references to fields of the user provided variable is returned. -- Best regards, Antony Polukhin