Здравствуйте, 10000.monkeys, Вы писали:
1M>Поправьте если не прав.
Не прав. Вот тут:
return std::make_unique<test>(s);
из s создается временный std::string который благополучно умирает при возврате std::unique_ptr<test>.
Замени const std::string& s на
std::string s
struct test
{
test(const std::string& s) : s(s) {}
std::string s;
};
P.S.
Если ты где-то прочитал что const ссылка продлевает время жизни объекта, то это совсем не тот случай. const ссылка будет оставаться валидной только при возврате объекта из функции по значению.