Конструктор по умолчанию для варианта Boost инициализирует первый ограниченный тип. Как мне по умолчанию инициализировать любой элемент, кроме первого? Один из вариантов — просто назначить созданный по умолчанию объект правильного типа. Однако это не работает с некоторыми типами, такими как массивы. Без инициализации boost::get
бросает boost::bad_get
исключение. Так что я не могу сделать std::copy
на массиве.
boost::variant<std:string, int[5]> v; // default initializes the string.
Мне нужно что-то вроде
initialize<int[5]>(v);
У меня также были проблемы компиляции при использовании массива в качестве первого ограниченного типа. Clang сообщает об ошибке следующим образом:
object expression of non-scalar type 'int [5]' cannot be used in a pseudo-destructor expression
operand.~T();
Редактировать: У меня тот же вопрос относительно boost.optional. Есть ли API по умолчанию для инициализации необязательного? Я имею в виду, кроме присвоения из инициализированного по умолчанию Т.
Задача ещё не решена.
Других решений пока нет …