Construtor de lista de inicializadores de fornecimento de C ++ para modelo de classe

Eu tenho um modelo de classe Templ com o parâmetro de modelo T, e a classe Templ tem um membro de dados do tipo T, chamado obj. Eu escrevi um modelo de construtor variádico que encaminha os argumentos para o construtor de obj:

template <class T>
class Templ
{
public:
     template <class... Args> explicit Templ (Args&&... args)
     : obj (std::forward<Args>(args)...)
     {
     }
private:
     T obj;
};

Agora eu percebi que o tipo T pode ser uma classe com um construtor de lista de inicialização, e eu quero que seja acessível via Templ. Então eu verifiquei o questd::list::emplace estd::make_shared Faz. Eles têm uma função variadica como a minha, mas eles não têm overrides tomando uma lista de inicialização. Por algum motivo.

Então, primeira pergunta: por quê? Quero dizer, e se eu usar alguma classe T com um ctor de lista de inicialização, e então eu usostd::list<T>? Por que o list :: emplace não tem uma versão que tenha um initializer_list? Talvez haja uma boa razão para eu fazer isso ... então eu quero saber.

Além disso, independentemente do que o STL faz - eu deveria fornecer um init-list ctor como um bom design? Quero dizer, é como o diretor variadista, certo? Permitindo ao usuário escolher qualquer tipo ou classe T para usar com o Templ <> e chamar diretamente qualquer ctor definido para T. Mesmo se for um ctor tomando uma lista de inicialização.

questionAnswers(1)

yourAnswerToTheQuestion