#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))
工作正常。
为什么?