En fait, aucun des deux ne fonctionne.
Il a été décidé que les fonctions de construction de type emplace en C++ std
seraient construites avec ()
et non {}
s. Il n'y a pas forte raison pour laquelle cela a été choisi (que je connais).
emplace_alt
SND make_unique_alt
pourrait être ajouté à std
où il construit à l'aide {}
à la place. (un meilleur nom devrait être choisi, naturellement)
Donc la réponse courte est "parce que std
le dit". La réponse moyenne est "c'est un choix quasi arbitraire fait par std
, suivi ailleurs pour être cohérent". La réponse longue impliquerait d'être dans la pièce où c'est arrivé et où elle a été revisitée: ce n'est pas une réponse longue.
Fonctionne bien avec moi http://coliru.stacked-crooked.com/a/7c54feda67017bf1 (J'ai dû ajouter un constructeur à la structure, mais c'est tout) – Pumkko
Non, les deux sont [non autorisés] (http://rextester.com/WBNIK94302). Si vous fournissez un ctor ('S :: S (int, int)'), les deux sont [fine] (http://rextester.com/UHFEW17433). – songyuanyao
@Pumkko Je voulais dire exactement struct simple sans ctor :) – vladon