Вопрос скорее теоретический, нежели практический. Просто хочется лучше понимать происходящее внутри библиотеки и возможности которые дают новые фичи
Допустим я хочу написать свой optional класс (типо boost::optional)
template<class T>
class optional
{
...
public:
optional(const T& obj)
{
new (storage) T(obj);
initialized = true;
}
...
private:
bool initialized;
aligned_storage<sizeof<T>, alignof<T>>::type storage;
};
В доке написанно
Provides the member typedef type, which is a PODType suitable for use as uninitialized storage for any object whose size is at most Len and whose alignment requirement is a divisor of Align.
Но я пока не могу понять, что мешает использовать такой класс для не-POD объектов. Может я что-то упускаю?
Я знаю, что memcpy для не-POD объекта в буфер (размером sizeof) скорее всего приведет к некорректному объекту. Но тут у нас копирования байтов нет, просто создание нового объекта через конструктор копирования...