Разница поведения макроса в зависимости от компилятора

Данный макрос работает без ошибок под компилятором g++

#define ASSIGN_VAR_RN(var, size, buf) \
({\
    for (int i = sizeof(var) - 1; i >= 0; i--) {\
        var |= buf[i]; \
        if (i != 0) \
            var <<= 8; \
        size++;\
    }\
})

Но выдает следующие ошибки, если попробовать запустить под Microsoft Visual C++ Compiler

source_file.cpp(34): error C2059: syntax error: '{'
source_file.cpp(34): error C2143: syntax error: missing ';' before '{'
source_file.cpp(34): error C2059: syntax error: ')'

Функция запуска выглядит следующим образом

int main()
{
    char a[] = "hello world";
    int b = 0;
    int size = 0;
    ASSIGN_VAR_RN(b, size, a);   // строка 34 с ошибками выше
    std::cout << std::hex << b << endl;
}

Ответы (0 шт):