Опасность использования виртуальных базовых операторов перемещения, когда они теперь могут использоваться?

Это касается разрешения проблемы C ++http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1402 , Резюме:

template
struct wrap
{
   wrap() = default;

   wrap(wrap&&) = default;
   wrap(const wrap&) = default;

   T t;
};

struct S {
   S(){}
   S(const S&){}
   S(S&&){}
};

typedef wrap W;

// Error, defaulted move constructor of "wrap" is deleted!
W get() { return W(); }

(Проблема в том, что мы получаем ошибку для этого фрагмента, хотя компилятор может просто использовать конструктор копирования "S", как это происходит, когда пользователь явно пишет конструктор перемещения "заворачивать", Проблема была решена, чтобы игнорировать удаленные конструкторы перемещения (и операторы присваивания) во время разрешений перегрузки, следовательно, при необходимости использовался конструктор копирования выше.)

Когда разрешениебыл составлен следующий комментарий об этой резолюции:

Нет дополнительных ограничений для неявных / дефолтных операций перемещения относительно копирования. Это означает, что назначение перемещения в виртуальной базе опасно (и компиляторы, вероятно, должны предупреждать) [...] Но мы решили в Батавии, что мы не былиЯ не собираюсь сохранять весь код C ++ 03 от неявных операций перемещения, и я думаю, что это разрешение дает существенные преимущества в производительности.

Может кто-нибудь, пожалуйста, опишите, что касается виртуальных операторов назначения базовых перемещений?

Ответы на вопрос(1)

Ваш ответ на вопрос