Очередной вопрос из серии "а кто прав?" -
https://godbolt.org/z/PBUqJyСуть: есть некий библиотечный некопируемый класс
A
, которому
по некоторым причинам на мув-конструктор не навесили
noexcept
. Также есть пользовательский класс
B
, который хранит экземпляр класса
A
как поле. Пользователь уверен, что
A(A&&)
никогда не бросит исключение и объявляет
B(B&&) noexcept = default;
, а затем хочет сложить объекты класса
B
в вектор.
Итог:
gcc не компилирует с ассертом
result type must be constructible from value type of input range
clang радостно проглатывает.
Вопросы: кто прав? как заставить компилятор сгенерировать
B(B&&) noexcept = default;
действительно noexcept
, не переписывая его тело вручную (что решает проблему)?