Никакой запятой не разрешено в аргументе макроса, потому что это будет рассматриваться как несколько аргументов, и препроцессинг будет неправильным. Однако мы можем заключить в скобки аргумент, чтобы препроцессор рассматривал его как один аргумент. Есть ли макрос или другие методы, которые могут удалить заключенные круглые скобки?
Например, если я определяю макрос как
#define MY_MACRO(a, b) ...
и используйте его как
MY_MACRO( A<int, double>, text );
будет неправильным. используйте его как
MY_MACRO( (A<int, double>), text)
с макросом или техникой для удаления круглых скобок будет отлично. Boost предоставляет макрос BOOST_IDENTITY_TYPE
только для типов, но не для общих случаев