Каков хороший способ проверки наличия определенных функций C++11 стандартной библиотеки .
Что касается функций компилятора, я просто проверил версию компилятора для (IMHO )основных компиляторов(VC++ , gcc , clang на данный момент, возможно Intel)Хотя это не самый лучший и гибкий подход, я пока не знаю ничего лучше, кроме clang , у которого действительно хорошие __has_feature
макросы.
Но еще хуже обстоит дело с библиотечными функциями, которые не так жестко связаны с компилятором. На данный момент я хочу использовать тот же подход проверки версии компилятора для VC++(где это довольно просто, если использовать собственную библиотеку ).Для clang я могу по крайней мере использовать __has_include
для крупномасштабных -запросов на основе заголовка -. Помимо этого, я думаю, проверка __GLIBCXX__
значения, если оно определено, может быть хорошей идеей, но опять же я не могу найти никакой информации о том, какие конкретные версии libstdc++ представили какие функции, кроме того, что поддерживает текущая версия.
Методы должны быть сохранены для проверок препроцессора и тому подобного, так как я хочу использовать его в библиотеке заголовка -без какой-либо сложной процедуры настройки и без использования каких-либо сторонних -сторонних библиотек (и да, boost является третьей стороной -).
Итак, каковы мои возможности проверки конкретных функций библиотеки C++11 в этих (довольно узких )условиях. Может быть, даже в масштабе объявляемых конкретных функций или типов?
Если проверка версии компилятора или библиотеки по-прежнему является лучшим подходом, где я могу найти подробную информацию о конкретных функциях C++11, поддерживаемых конкретной версией libstdc++(и, возможно, другие важные, libc++ возможно )?
FWIW на данный момент меня интересуют функции <cstdint>
, C++11 <cmath>
и std::hash
, но это может измениться и, вероятно, не имеет значения для общего подхода.