Попробуйте взять в скобки вложенные операторы.
X++:
return _cmd == Command::CopyAll ? new EditCopyAll ()
: (_cmd == Command::Copy ? new EditCopy ()
: (_cmd == Command::MoveAll ? new EditMoveAll ()
: (_cmd == Command::Move ? new EditMove (): null))); // ошибка "Типы операнда не совместимы с оператором."
По-моему, компилятор просто лажает на такой конструкции