CLang-CL поддерживает атрибуты, прагмы и другие функции как для MSVC, так и для собственного CLang.
Компилятор (драйвер) CLang-CL включен в пакет CLangвнутри установки MSVC , этот компилятор позволяет компилировать исходники с использованием бэкенда CLang, принимая все (или большинство) специфичные для MSVC-CL параметры команды, поэтому clang-cl можно использовать как прямая замена для MSVC cl.
Случайно заметил, что следующий код прекрасно компилируется в clang-cl:
inline __attribute__((always_inline)) int f(int x) { return x + 1; }
inline __forceinline int g(int x) { return x + 1; }
int main() {
volatile int x = f(4) * g(6);
}
То есть оба смешанные нативные-CLang/GCC-специфичные
__attribute__((always_inline))
и специфичный для MSVC
__forceinline
атрибуты понимаются и применяются правильно одновременно.
Знаете ли вы, может ли CLang-CL таким же образом принимать, использовать и смешивать все (или большинство) другие атрибуты и прагмы, характерные как для MSVC, так и для собственного CLang/GCC?
Также знаете ли вы, насколько хорошо CLang-CL охватывает все остальные функции MSVC и собственного CLang? Охватывает ли он большинство (или все) особенностей обоих миров одновременно?