Sto provando a utilizzare std::make_unique
per installare una classe il cui costruttore deve ricevere un std::initializer_list
. Ecco un caso minimo:Chiamare il costruttore initializer_list tramite 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;
}
Si può vedere su Coliru che non costruisce:
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"});
Quindi, è make_unique
riferito in grado di utilizzare initializer_list
s? C'è un bug in GCC 4.9.1? O ho trascurato qualcosa?
Gli elenchi rinforzati non possono essere dedotti dalla deduzione degli argomenti del modello. Prova 'make_unique (std :: initializer_list ({" Hello "," Mondo "}))'. –
@KerrekSB Bene, mi sembra una risposta :) – Quentin
Hm, funziona e aiuta? –