2016-04-14 1 views
0

У меня есть класс unit, который имеет свойствоошибка: не может передать объекты нетривиально-Copyable типа через `` ...

std::is_trivial<unit>::value; // true 
std::is_trivially_copyable<unit>::value; // true (on compilers which have this trait) 

Я хотел бы передать векторы unit как кортеж, например

using geodeticTuple = std::tuple<unit, unit, unit>; 

Мне нужно, чтобы эти векторы проходили в функции преобразования, которые используют разные типы аргументов, например.

someOtherType convert(const geodeticTuple& point, const geodeticTuple& origin) или

someOtherType convert(const geodeticTuple& point, ...)

с помощью MSVC2015, это работает совершенно нормально, но с GCC-4.9.3, я получаю ошибку:

error: cannot pass objects of non-trivially-copyable type const geodeticTuple {aka const struct std::tuple<unit, unit, unit>} through ...

и так НКУ-4,9 .3 не поддерживает стили типа стиля is_trivially_xxx, у меня возникают проблемы с пониманием того, почему это происходит.

Является ли кортеж тривиальными типами не тривиально с возможностью копирования?

+0

Почему вы используете старую функцию типа var var вместо шаблона вариационной функции? –

+0

У меня были проблемы, потому что это не похоже на отсутствие аргументов. –

ответ

1

Операторы присваивания копии/перемещения tuple требуют специальной обработки ссылочных типов, поэтому они должны быть предоставлены пользователем в общем случае.

Поскольку стандарт не требует тривиальной возможности копирования, проблема QoI связана с тем, реализуют ли разработчики дополнительную длину обеспечения этой гарантии (что потребует добавления дополнительных специализаций).

Смежные вопросы