Просто сделайте:
std::unique_ptr<nts::IComponent> component = std::make_unique<nts::cInput>(val);
Также вы, вероятно, имели в виду:
return component;
вместо:
return (val);
Но вы можете просто сделать:
return std::make_unique<nts::cInput>(val);
вместо двух строк.
РЕДАКТИРОВАТЬ:
std::make_unique
доступно из C ++ 14, если вы используете более старую версию, настоятельно рекомендуем обновить , или вы можете сделать:
std::unique_ptr<nts::IComponent> component = std::unique_ptr<nts::cInput>(new nts::cInput(val));
или
return std::unique_ptr<nts::cInput>(new nts::cInput(val));