Мне интересны возможности обойти ограничение на бинарное приведение типов, ибо bit_cast использует копирование в переменную на стеке, что не особо быстро.
Но насколько я знаю, тривиальные типы не инициализируют память в дефолтных конструкторах. Значит ли это что для bit_cast'а в тривиальный тип мы можем использовать placement new с указателем на интересующую нас память и тем самым сохранить байты в памяти без изменений и избавить себя от ненужного копирования?
Есть ли какие-либо позиции стандарта по этому поводу, которые я не могу нагуглить и которые запрещают использовать мне placement new с какими-то "нетакими" указателями?
К примеру, первый вариант это то как другие используют данную фичу.
Второй же вариант это то как я хочу использовать.
#include <iostream>
using namespace std;
class Foo
{
private: int __unused;
public: Foo() : __unused(1) {} //Мы всёравно сохраняеем trivially_copyable, так что всё хорошо
};
int main()
{
//char bytes[1024];
//auto* foo = new(bytes) Foo;
Foo bytes{};
auto* foo = new(&bytes) int;
cout << *foo;
return 0;
}