Я хотел сделать кросс-платформенное, необязательное использование std::filesystem
и использовал следующий код:
#ifdef __has_include
#if __has_include(<version>)
#include <version>
#endif
#endif
#ifdef __cpp_lib_filesystem
#include <filesystem>
// Use of std::filesystem::path
#endif
Затем я могу передать -std=c++11
или -std=c++17
и иметь или не иметь поддержку файловой системы.
Это отлично работает почти везде, но на недавней OSX без явного установленного уровня целевой платформы. Кажется, это по умолчанию для некоторых более старых OSX и вызывает ошибку компиляции:
ошибка: «путь» недоступен: введено в macOS 10.15
...
Applications / Xcode_11.3.1.app / Contents / Developer / Toolchains / XcodeDefault.xctoolchain / usr / bin /../ include / c ++ / v1 / filesystem: 739: 24:
примечание: 'путь' здесь явно отмечен как недоступный
Итак, как я должен справиться с этим в OSX, не полагаясь на проверки конфигурации, если такой код компилируется? Разве макрос определения функций __cpp_lib_filesystem
не предназначался для того, чтобы сделать такие шаги настройки ненужными?
__cpp_lib_filesystem
установлен, еслиstd::filesystem
не полностью функционален. Поскольку тестирование функций с использованием этих определений должно позволить, например, используйте резервный код. - person t.niese   schedule 07.10.2020fstream
, похоже, не позволяет включатьfilesystem
в OSX. - person Eddymage   schedule 07.10.2020