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