以下代码编译正常.
#define CMD_MACRO(pp, cmd) \
{ \
if (pp)\
{ cmd; } \
}
template<class T> void operate_on(T &data, char c) {
data=data+1;
};
int main() {
int book=4;
char c;
CMD_MACRO(book, {
operate_on<int>(book, c);
});
};
Run Code Online (Sandbox Code Playgroud)
请注意,我的代码中的实际宏更复杂,我给出了一个简化版本,这可能没有太大的逻辑意义
现在,如果我在函数中添加另一个模板参数,它会给出编译错误(代码注释中解释的问题):
template<class T, bool b> void operate_on(T &data, char c) {
data=data+1;
};
int main() {
int book=4;
char c;
CMD_MACRO(book, {
operate_on<int, false>(book, c); /* here the "," between int and
false is being treated
as separating arguments to CMD_MACRO,
instead …Run Code Online (Sandbox Code Playgroud)