1
#include <type_traits>

using namespace std;

template<class T, class = typename enable_if<is_same<T, char>::value>::type> // OK
struct A {};

#define ENABLE_IF(expr) class = typename enable_if<expr>::type

template<class T, ENABLE_IF((is_same<T, char>::value))> // OK
struct B {};

template<class T, ENABLE_IF(is_same<T, char>::value)> // warning C4002 and error C1004
struct C {};

int main()
{}

我的编译器是 VC++ 2013 RC。

ENABLE_IF(x)没有按预期工作:

警告 C4002:宏“ENABLE_IF”的实际参数过多致命

错误 C1004:发现意外的文件结尾

然而ENABLE_IF((x))工作正常。

为什么?

4

1 回答 1

3

is_same<T, char>::value

中间有一个逗号,因此预处理器将其视为宏的两个参数,

is_same<T,char>::value

于 2013-10-15T05:23:14.760 回答