This SO post seems to suggest that language indeed supports accepting temporaries only for arguments.
Why is then unique_ptr designed to accepted aliased pointers, like this:
auto ptr = new Widget{};
auto uptr = std::unique_ptr<Widget>(ptr);
Why not just restrict to:
auto uptr = std::unique_ptr<Widget>(new Widget{});