Это как std::optional только без маркировки если есть значение или нет?
Типа
https://github.com/akrzemi1/markable ?
Тут уже подсказали что и как start lifetime as конечно лучше всего, а если его нет то placement new.
Кстати memcpy не всегда можно использовать если у нас тип не тривиально копируемый.
А placement new не сработает если нет конструктора копирования.
В общем, для общего случая там работы хватить
Может стоит вместо копирования сделать как inplace/ make_optional ?
И передавать параметры как есть дальше, а там уже сам тип лучше тебя знает, что делать.