По умолчанию инициализировать произвольный ограниченный тип варианта буста и необязательно

Конструктор по умолчанию для варианта 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 по умолчанию для инициализации необязательного? Я имею в виду, кроме присвоения из инициализированного по умолчанию Т.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]