Павел Кузнецов,
ПК>Этого не происходит, т.к. унаследованные операции присваивания, определенные в CDispinterfaceWrapper<>, скрываются операциями присваивания, неявно объявленными в классе CVideoEditWrapper.
С одной стороны да. Торможу.

Никак не привыкну, что шаблон — это не просто кусок, который бездумно подставляется в наследуемый класс, а полноценный предок.
А с другой — почему тогда при explicit'е он оператор присваивания по умолчанию сам не генерит, но и из предка брать не желает? Да и разве генерятся операторы? Мне казалось, что только конструкторы могут по умолчанию создаваться...
ПК>В твоем коде есть и еще несколько неудачных моментов, среди которых использование операции присваивания *this = ... в конструкторе класса.
Хм. Ну, наверное... В общем, по результатам раздумья, надо сделать в базовом классе функции для выполнения копирования от разных источников, а в наследниках вызывать эти функции по мере необходимости, в копирующих ли конструкторах, в операторах ли.
ПК>Если придерживаться твоего дизайна, нужно "вручную" создать CVideoEditWrapper::operator =(CVideoEditWrapper const&)
Ага, пришлось. И со вторым тоже.
ПК>и делегирировать вызов базовому классу.
да не, к чему он там.
ПК>Не очень понятно, зачем, вообще, определяется класс CVideoEditWrapper вместо:
ПК>typedef CDispinterfaceWrapper<_DVideoEdit> CVideoEditWrapper;
Я тут упрощенно написал. В обоих классах есть еще функции, в базовом — общие для наследников, а в наследниках — те, которые в базовом приходится вызывать через приведение к наследнику.
Спасибо!