Рассмотрим следующую функцию, которая возвращает смещение в байтах между I-м элементом кортежа и адресом кортежа:
Код: Выделить всё
template
requires ( ( not std::is_reference_v ) && ... )
std::intptr_t tuple_elem_offset(const std::tuple& tuple)
{
const auto element_address = reinterpret_cast(&std::get(tuple));
const auto tuple_address = reinterpret_cast(&tuple);
return element_address - tuple_address;
}
Гарантируется ли, что возвращаемое значение всегда находится в диапазоне [0, sizeof(std::tuple))?Я понимаю, что кортежи обычно реализуются с использованием множественного наследования, и это подразумевает свойство вложенности внутри для всех нессылочных объектов, содержащихся в кортеже. Мой вопрос: обеспечивается ли это языком?
Подробнее здесь:
https://stackoverflow.com/questions/791 ... hin-the-tu