Под пересылаемой конструкцией на месте я понимаю std::allocator::construct и различные методы emplace, например, std::vector::emplace_back< /а>. Я просто обнаружил, что перенаправленная конструкция на месте в С++ не использует (не может?) Синтаксис инициализации списка. В результате кажется, что никогда нельзя пересылать агрегат на месте. Я просто хочу убедиться, что переадресованная конструкция на месте не поддерживает инициализацию списка и, следовательно, агрегатные типы. Это связано с ограничением языка? Может ли кто-нибудь дать ссылку на стандарт по этому вопросу? Ниже приведена иллюстрация:
Хотя мы можем выполнять строительство на месте напрямую, как
int(*p)[3] = ...;
new(p) int[3]{1, 2, 3};
мы не можем выполнять переадресацию на месте, например
std::allocator<int[3]> allo;
allo.construct(p, 1, 2, 3);
Type object((foo, bar), anotherFoo, anotherBar);
? - person user3528438   schedule 10.04.2015{}
? - person Yakk - Adam Nevraumont   schedule 10.04.2015std::allocator::construct
(иstd::allocator_traits::construct
) указаны для использования()
, а не{}
, и должны оставаться такими по причинам совместимости (vector<int>(10, 10)
противvector<int>{10, 10}
). Есть проблема LWG, которую нужно решить он возвращается к использованию{}
, если()
не работает. - person T.C.   schedule 10.04.2015{}
в некоторых случаях все еще может удивить программистов :) - person Lingxi   schedule 10.04.2015