При разработке класса, который можно перемещать, но не копировать, естественно объявить конструктор копирования закрытым. При наличии только перемещаемых и тривиально копируемых объектов в качестве членов экземпляра имеет смысл разрешить компилятору неявно генерировать конструктор перемещения.
Однако при поддержке как VS11, так и G++4.7 я обнаружил несовместимость:
- VS11 требует явно определенных конструкторов перемещения
- G++ требует, чтобы явные конструкторы перемещения имели либо соответствующий общедоступный конструктор копии, либо ключевое слово noexcept.
- VS11 не поддерживает ключевое слово noexcept.
Как видите, это ставит меня в тупик. Мой класс нельзя копировать. Я должен поддерживать как VS11, так и MinGW/GCC. Мне нужно, чтобы мой класс можно было перемещать.
Я что-то не так понял, или есть способ обойти эту крошечную проблему? Могу ли я сделать компиляцию неудачной, если сгенерирован вызов конструктора копирования? Есть ли лучшее решение этой проблемы?