В основном меня интересует случай #include <filesystem>
, но также и другие экспериментальные функции, которые в конечном итоге включаются в стандарт.Проблема, как вы все знаете, заключается в том, что по мере развертывания новых функций C ++ (например, файловой системы в C ++ 17) некоторые компиляторы могут реализовывать их как экспериментальную функцию (например, GCC 7), в то время как другие могут реализовывать это какне экспериментальная особенность.Я понял, что API-интерфейсы немного изменяются при переходе от экспериментальной к финальной реализации, но ради следующего предположим, что они не ...
Есть ли способ сделать что-то вроде SFINAEвключить правильный файл.В псевдокоде это будет выглядеть примерно так:
#ifdef filesystem
#include <filesystem>
using std::filesystem;
#else
#include <experimental/filesystem>
using std::experimental::filesystem;
#endif
Я не знаю ни одного механизма времени компиляции, который мог бы что-то сделать, если файл не найден.Что-то подобное существует?
Мне известны другие подходы для решения этой проблемы, но все они основаны на обнаружении определенного компилятора и последующем объявлении макроса, который сообщает вам, какой #include
использовать.Поэтому, пожалуйста, не публикуйте ответ, который, по сути, просто собирается проверить, является ли компилятор, например, GCC 7, а затем выполнить некоторую обработку на основе этого.