В C++20 гарантируются ли элементы кортежа, не являющиеся ссылками, вложенными в кортеж?C++

Программы на C++. Форум разработчиков
Anonymous
В C++20 гарантируются ли элементы кортежа, не являющиеся ссылками, вложенными в кортеж?

Сообщение Anonymous »

Рассмотрим следующую функцию, которая возвращает смещение в байтах между 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

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