我有以下宏:
#define ASSERT_ITERATOR_VALUE_TYPE(Iterator__, Value_type__) \
static_assert(std::is_same<Value_type__, typename Iterator__::value_type>::value, \
"Expected iterator with value type #Value_type__")
在上面的宏中,我试图将Value_type__
标记作为static_assert
中的第二个输入参数插入/追加到字符串文字中。
显然,这不是我想要实现的目标,因为如果我将宏声明为:
ASSERT_ITERATOR_VALUE_TYPE(std::set<int>::iterator, double);
我会收到消息:
error: static assertion failed: Expected iterator with value type #Value_type__
^^^^^^^^^^^^^
相反,我想接收消息:
error: static assertion failed: Expected iterator with value type double
^^^^^^
是否有某种预处理器巫术可以帮助我实现我的目标?
答案 0 :(得分:9)
#define ASSERT_ITERATOR_VALUE_TYPE(Iterator__, Value_type__) \
static_assert(std::is_same<Value_type__, typename Iterator__::value_type>::value, \
"Expected iterator with value type " #Value_type__)
将宏参数扩展为字符串文字,然后依赖字符串文字连接。