Re[8]: CLang
От: Constructor  
Дата: 13.03.18 18:37
Оценка:
Здравствуйте, 3m-soft, Вы писали:

3S>Два вечера попыток прикрутить Clang к Visual Studio 2017 не принесли положительного результата:


3S>Вариант №1: Установил Clang/C2 (experimental) из установщика студии. Результат: обламывается компиляция STL. В STL прямо в коде прописана проверка версии шланга и требуется более новая версия.

Да, в последних версиях работа со встроенным clang'ом немного поломалась (но все еще возможна при желании).
Чтобы избежать проверки версии clang в стандартной библиотеке, надо определить макрос _ALLOW_COMPILER_AND_STL_VERSION_MISMATCH (например, в настройках проекта: C/C++ → Preprocessor → Preprocessor Definitions).
Также для нормальной компиляции кода clang'ом необходим следующий код перед включением некоторых заголовочных файлов стандартной библиотеки (его разумно разместить в precompiled header):
#if defined(__clang__)
// workaround for bug in Clang with Microsoft Codegen
#define __is_trivially_destructible(arg) __has_trivial_destructor(arg)
#endif
Re[9]: CLang
От: 3m-soft  
Дата: 13.03.18 19:00
Оценка:
Здравствуйте, Constructor, Вы писали:

C>Здравствуйте, 3m-soft, Вы писали:


3S>>Два вечера попыток прикрутить Clang к Visual Studio 2017 не принесли положительного результата:


3S>>Вариант №1: Установил Clang/C2 (experimental) из установщика студии. Результат: обламывается компиляция STL. В STL прямо в коде прописана проверка версии шланга и требуется более новая версия.

C>Да, в последних версиях работа со встроенным clang'ом немного поломалась (но все еще возможна при желании).
C>Чтобы избежать проверки версии clang в стандартной библиотеке, надо определить макрос _ALLOW_COMPILER_AND_STL_VERSION_MISMATCH (например, в настройках проекта: C/C++ → Preprocessor → Preprocessor Definitions).
C>Также для нормальной компиляции кода clang'ом необходим следующий код перед включением некоторых заголовочных файлов стандартной библиотеки (его разумно разместить в precompiled header):
C>
C>#if defined(__clang__)
C>// workaround for bug in Clang with Microsoft Codegen
C>#define __is_trivially_destructible(arg) __has_trivial_destructor(arg)
C>#endif
C>


Да, по коду я видел, что можно определить этот макрос. Только мне смысла нет бороться за этот вариант. Мне нужен C++17, а встроенный Clang его не поддерживает.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.