Я обсуждал все области документации VMD, которые необходимо учитывать при использовании компиляторов Microsoft Visual C++. Библиотека VMD поддерживает версии VC++ 8 до последних 14. Они соответствуют Visual Studio 2005 через текущую Visual Studio 2015.
Здесь я довольно кратко приведу причуды VC++, которые следует учитывать при использовании VMD. Эти причуды существуют, потому что компилятор VC++ не имеет стандартного препроцессора, соответствующего C++. В частности, компилятор VC++ не следует всем правилам для расширения макроса при вызове макроса. Вот список вещей, которые следует учитывать при использовании VMD с VC++:
Макрос BOOST_VMD_IS_EMPTY будет ошибочно расширяться до 1, если вход разрешает функциональные макроимя, которое при вызове с пустым параметром расширяется до кортежа.
Макрос BOOST_VMD_ASSERT и соответствующие отдельные макросы VMD ASSERT для различных типов данных не вызывают немедленной ошибки компилятора, а вместо этого генерируют недействительный C++, если происходит ASSERT.
Когда макрос BOOST_VMD_ASSERT, или один из соответствующих отдельных макросов VMD ASSERT для различных типов данных, не генерирует ошибку, и макрос, в котором он используется, генерирует некоторый выход, необходимо использовать BOOST_PP_CAT для конкретизации пустого результата макроса VMD ASSERT с обычно сгенерированным выходом, чтобы правильно генерировать окончательное расширение макроса, в котором происходит VMD ASSERT.
При использовании BOOST_VMD_EMPTY после некоторого непустого расширения или при использовании BOOST_VMD_IDENTITY возвращаемое значение должно быть сцеплено с использованием BOOST_PP_CAT с пустым значением. Для этого можно использовать BOOST_VMD_IDENTITY_RESULT.
Избегайте использования пустых скобок для передачи данных в виде кортежа или сек, если VC++8 может использоваться в качестве компилятора.
Статья Visual C++ gotchas in VMD раздела Chapter 1. The Variadic Macro Data Library 1.9 Chapter 1. The Variadic Macro Data Library 1.9 может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.