Расширяется до числового значения, которое описывает максимальную функциональность, поддерживаемую библиотекой.
Дефолты до 20, если они явно не определены пользователем до включения первого заголовка библиотеки.
Следующие макросы не нуждаются в определении, если только не требуется настроить библиотеку для работы с компилятором и/или вызывающей конвенцией, не охватываемой механизмом автоматического обнаружения в boost/function_types/config/compiler.hpp
.
Расширяется до последовательности троичных модулей (эти типы данных определены в документации библиотеки Boost Preprocessor). Каждый элемент последовательности описывает один спецификатор конвенции вызова. Первым элементом в каждом кортеже является макро-суффикс BOOST_FT_CC_*
, вторым элементом является название тега, описывающего конвенцию вызова, а третьим — имя спецификатора. Уточнителем может быть пустая строка, поэтому третий элемент кортежа является либо BOOST_PP_EMPTY
, либо BOOST_PP_IDENTITY
(name)
.
Определите этот макрос, чтобы расширить набор возможных имен для пользовательских соглашений вызова. Макро по умолчанию ни к чему не расширяется.
Следующие имена предварительно определены библиотекой и не должны встречаться в определении BOOST_FT_CC_NAMES
:
#define BOOST_FT_BUILTIN_CC_NAMES \
(( IMPLICIT , implicit_cc , BOOST_PP_EMPTY ))\
(( CDECL , cdecl_cc , BOOST_PP_IDENTITY(__cdecl ) ))\
(( STDCALL , stdcall_cc , BOOST_PP_IDENTITY(__stdcall ) ))\
(( PASCAL , pascal_cc , BOOST_PP_IDENTITY(pascal ) ))\
(( FASTCALL , fastcall_cc , BOOST_PP_IDENTITY(__fastcall) ))\
(( CLRCALL , clrcall_cc , BOOST_PP_IDENTITY(__clrcall ) ))\
(( THISCALL , thiscall_cc , BOOST_PP_IDENTITY(__thiscall) ))\
(( IMPLICIT_THISCALL , thiscall_cc , BOOST_PP_EMPTY ))
Включает специальную конференцию вызовов. * обозначает макросуффикс, как определено BOOST_FT_CC_NAMES
или BOOST_FT_BUILTIN_CC_NAMES
.
Макро расширяется до списка ограничений, разделяемых символом |
. Возможные пункты:
- callable_builtin
- член
- не-член
- вариадный
- non_variadic
Если такой макрос не определен для конкретной конвенции вызова, он отключен. Пример:
#define BOOST_FT_CC_STDCALL non_variadic|callable_builtin
Определение этого макроса приводит к определению следующих макросов, если они еще не определены:
#define BOOST_FT_CC_CDECL BOOST_FT_COMMON_X86_CCs
#define BOOST_FT_CC_STDCALL non_variadic|BOOST_FT_COMMON_X86_CCs
#define BOOST_FT_CC_FASTCALL non_variadic|BOOST_FT_COMMON_X86_CCs
Этот макрос позволяет изменять синтаксис вызываемых встроенных типов. Полезно обрабатывать компилятор конкретного размещения спецификатора вызывающей конвенции.
Определение по умолчанию выглядит следующим образом:
#define BOOST_FT_SYNTAX(result,lparen,cc_spec,type_mod,name,rparen) \
result() lparen() cc_spec() type_mod() name() rparen()
Настройка на void
для компиляторов, которые настаивают на параметре void
для нулевых типов функций, пустой по умолчанию.
Поддержка инвалидов для cv-квалифицированных типов функций. Квалифицированные типы функций являются незаконными в соответствии с текущей стандартной версией, но по этому вопросу существует отчет о дефектах. Он по умолчанию 1
до изменения стандарта, установка этого макроса на 0
может не работать.
Следующие макросы полезны для тестирования при изменении исходного кода библиотеки.
Делает предварительную обработку компилятора максимально возможной из библиотечного кода (вместо загрузки уже предварительно обработанных файлов заголовка), если он определен.
Заставляет компилятор предварительно обрабатывать цикл возможных имен для пользовательских соглашений вызова (а не загружать уже предварительно обработанный файл заголовка), если он определен.
Этот макрос определяется автоматически, если определено BOOST_FT_CC_NAMES
.