Макрос, который проверяет требования std::vector

У меня есть неизменный класс - все участники const, Поскольку он неизменный, нет конструктора по умолчанию и назначения копирования. В C++11 я использую этот класс в std::vector без проблем.

Теперь мне нужно скомпилировать код в среде, которая поддерживает только C++03. Очевидно, мой класс не CopyAssignable, а C++ 03 std::vector требует этого, я не могу поместить экземпляры класса в вектор.

Поскольку код будет поддерживаться на дружественных для C++11 компиляторах и компилироваться и запускаться только в среде C++ 03, я подумал, что самый простой способ сделать это - удалить const модификатор в C++ 03. Это сделает класс CopyAssignable и будет работать в C++03. Конечно, в C++11 я все еще хочу, чтобы класс был неизменным.

Я просмотрел длинный список макросов Boost C++11, но не смог найти ни одного, который бы сообщал мне, требуются ли в std::vector типы CopyAssignable.

Есть ли способ сделать это, или я должен просто ввести свой собственный макрос, который будет установлен во время компиляции?

1 ответ

Вероятно, проще всего просто проверить версию C++; #if __cplusplus < 201103L должно быть достаточно. Предположительно, нет макроса Boost, проверяющего это, потому что все компиляторы C++11 совместимы в этом отношении.

Другие вопросы по тегам