The std::vector constructor that you're trying to call uses std::initializer_list but std::initializer_list unfortunately doesn't allow "perfect forwarding" (it's only possible to copy from it) so that is why it doesn't work with move-only types like std::unique_ptr.
did you try make_unique?
However what you are attempting may not be doable. Unique ptr prevents a great many things that should work, because that is its special magic thing that makes it useful (the same limitations that make it *unique* are behind it, preventing copies mostly).
I understand, but the why is not clear to me. Peter87 says something about perfect forwarding and initializer_list, can you expand on that? Why does initializer_list not suppport perfect forwarding? why this limitation? can it be added to a subclass?
std::initializer_list only gives const access to the elements. You cannot move the elements of a std::initializer_list. You're forced to copy them.
Apparently std::initializer_list was designed before move semantics.
std::initializer_list was designed around 2005 to 2007, before move semantics matured, around 2009. At the time, it was not anticipated that copy semantics would be insufficient or even suboptimal for common value-like classes.