【发布时间】:2014-12-27 07:25:18
【问题描述】:
#define DECLARE_GLOBAL_OPERATOR(OPERATOR) \
X OPERATOR(const X &, const X &);
struct X {};
DECLARE_GLOBAL_OPERATOR(operator+);
上面的代码声明了一个全局加法运算符,正如人们直觉所期望的那样,但是宏只接受运算符符号的简单变体在 Clang 3.5.0 和 ideone 上不起作用(使用 C++11 测试)。
#define DECLARE_GLOBAL_OPERATOR(SYMBOL) \
X operator##SYMBOL(const X &, const X &);
struct X {};
DECLARE_GLOBAL_OPERATOR(+);
在这里,Clang 抱怨说 pasting formed 'operator+', an invalid preprocessing token 而 ideone 输出 pasting "operator" and "+" does not give a valid preprocessing token。这段代码格式不正确吗?
请注意,下面的代码可以正常编译和执行,因此问题似乎与将 +、-、x 或 / 参数传递给宏无关。
#define WHATEVER(SYMBOL) \
int value = 2 SYMBOL 4;
【问题讨论】:
标签: c++ macros operators operator-keyword