Próbuję użyć std::make_unique
do zainicjowania klasy, której konstruktor ma otrzymać std::initializer_list
. Oto minimalne przypadek:Wywołanie konstruktora initializer_list przez make_unique/make_shared
#include <string>
#include <vector>
#include <initializer_list>
#include <memory>
struct Foo {
Foo(std::initializer_list<std::string> strings) : strings(strings) {}
std::vector<std::string> strings;
};
int main(int, char**) {
auto ptr = std::make_unique<Foo>({"Hello", "World"});
return 0;
}
można zobaczyć na Coliru, że nie budować:
main.cpp:14:56: error: no matching function for call to 'make_unique(<brace-enclosed initializer list>)'
auto ptr = std::make_unique<Foo>({"Hello", "World"});
Więc jest make_unique
podobno w stanie korzystać initializer_list
s? Czy w GCC 4.9.1 występuje błąd? A może coś przeoczyłem?
Utracone listy nie mogą zostać wyprowadzone przez odjęcie od szablonu. Wypróbuj 'make_unique (std :: initializer_list ({" Hello "," World "}))'. –
@KerrekSB Cóż, to wygląda na odpowiedź: – Quentin
Hm, czy to działa i czy to pomaga? –