В DR 2137 мы следующий тексте (курсив мой):DR 2137 не ясно мне
Не ясно, в коде, как следующее, что при выборе копии/переместить конструктора является правильным выбором когда список инициализатор содержит один элемент типа инициализации, в соответствии с требованиями выпуска 1467:
#include <initializer_list> #include <iostream> struct Q { Q() { std::cout << "default\n"; } Q(Q const&) { std::cout << "copy\n"; } Q(Q&&) { std::cout << "move\n"; } Q(std::initializer_list<Q>) { std::cout << "initializer list\n"; } }; int main() { Q x = Q { Q() }; }
Здесь цель в том, что
Q
объекты могут содержать другиеQ
объектов, , но это нарушается решением проблемы 1467.
Я хотел бы понять, почему приведенный выше код будет нарушен разрешением issue 1467.
Ну, проблема заключается в том, следует ли 'Q {Q()};' вызывать 'Q (Q &&)' или 'Q (std :: initializer_list
@ M.M Это явно отвечает на мой вопрос. Но почему решение, данное 2137 лучше, чем 1467? Если вы предпочитаете, заполните ответ на вопрос, чтобы я мог закрыть поток. Благодарю. –
Я не мог сказать, почему один лучше другого –