У меня есть следующие определения:
template<typename T1, typename T2>
class Test2
{
public:
static int hello() { return 0; }
};
template<typename T>
class Test1
{
public:
static int hello() { return 0; }
};
#define VERIFY_R(call) { if (call == 0) printf("yea");}
С этим я пытаюсь скомпилировать следующее:
VERIFY_R( Test1<int>::hello() );
это прекрасно компилируется
VERIFY_R( (Test2<int,int>::hello()) );
этотакже хорошо компилируется, обратите внимание на круглые скобки вокруг вызова.
VERIFY_R( Test2<int,int>::hello() );
Это без скобок выдает предупреждение и несколько синтаксических ошибок:
warning C4002: too many actual parameters for macro 'VERIFY_R'
error C2143: syntax error : missing ',' before ')'
error C2059: syntax error : ')'
error C2143: syntax error : missing ';' before '}'
error C2143: syntax error : missing ';' before '}'
error C2143: syntax error : missing ';' before '}'
fatal error C1004: unexpected end-of-file found
Что здесь происходит?
Это происходит с VS2008 SP1.