Здравствуйте, Sm0ke, Вы писали:
S>S>v_map.try_emplace(true, std::in_place_type<some_type>); // Жалко, что так нельзя!
S>
Да, жалко, но, в принципе, решается через типы более высокого уровня, которые инкапсулируют внутри себя умные указатели:
class Outer
{
public:
Outer(int i, double d, const std::string& s)
: m_inner(std::make_unique<Inner>(i, d, s)) { }
private:
struct Inner
{
int i{};
double d{};
std::string s{};
};
std::unique_ptr<Inner> m_inner;
};
void foo()
{
std::map<int, Outer> m;
m.emplace(
std::piecewise_construct,
std::forward_as_tuple(1),
std::forward_as_tuple(42, 3.14, "Hello")
);
}