Убедитесь, что конструктор копирования никогда не вызывается, когда существует конструктор перемещения

При разработке класса, который можно перемещать, но не копировать, естественно объявить конструктор копирования как закрытый. Когда в качестве членов экземпляра используются только подвижные и тривиально копируемые объекты, имеет смысл позволить компилятору неявно генерировать конструктор перемещения.

Однако при поддержке VS11 и G ++ 4.7 я обнаружил несовместимость:

  • VS11 требует явно определенных конструкторов перемещения
  • G ++ требует явных конструкторов перемещения либо соответствующий открытый конструктор копирования, либо ключевое слово noexcept.
  • VS11 не поддерживает ключевое слово noexcept.

Как вы можете видеть, это ставит меня в тупик. Мои занятия не должен быть скопирован. я должен поддерживать и VS11 и MinGW / GCC. я необходимость мой класс, чтобы быть подвижным.

Я что-то не так понял или есть способ обойти эту крошечную проблему? Могу ли я сделать компиляцию неудачной, если сгенерирован вызов конструктора копирования? Есть ли лучшее решение этой проблемы?

5

Решение

Если вы добавите это в исходный файл

#ifdef _MSC_VER
#define noexcept
#endif

Вы сможете определить его как noexcept на GCC, но VC ++ будет игнорировать noexcept,

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]