Как обнаружить режим компиляции C ++ 20?C++

Программы на C++. Форум разработчиков
Anonymous
Как обнаружить режим компиляции C ++ 20?

Сообщение Anonymous »

При компиляции моей программы с использованием последней версии библиотеки OpenVDB от Clang в режиме C++20 я получаю сообщение об ошибке:

Код: Выделить всё

error: use of the 'assume' attribute is a C++23 extension
< /code>
Я вижу, что это связано с макросом openvdb_assume, условно определенным как (упрощенное): < /p>
#ifdef __has_cpp_attribute
#if __has_cpp_attribute(assume) >= 202207L
#define OPENVDB_ASSUME(...) [[assume(__VA_ARGS__)]]
#endif
#endif
#ifndef OPENVDB_ASSUME
#define OPENVDB_ASSUME(...) __builtin_assume(__VA_ARGS__)
#endif
Несмотря на условие __has_cpp_attribute (предположить)> = 202207L , макрос по -прежнему расширяется в [[предполагает]] в режиме C ++ 20. Онлайн демонстрация: https://gcc.godbolt.org/z/fey5gwc9p
Как нужно изменить условие, чтобы предотвратить его, и получить совместимый с C ++ 20 __builtin_assume (__ VA_ARG __)>

Подробнее здесь: https://stackoverflow.com/questions/797 ... ompilation

Вернуться в «C++»