Минимального кодом большей проблемы:Доступ указатель к элементу данных с помощью макроса результатов в «ошибке: ожидаются безоговорочным идентификатор перед„*“знака»
struct S { int i; };
typedef int (S::*Type);
Type foo (int) { return &S::i; }
#define FOO(X) *foo(X)
int main()
{
S s;
s.*foo(0) = 0; // ok
s.FOO(0) = 0; // error <--- ??
}
Если foo()
метода заменяются FOO()
макросъемки, чтобы избежать " * ', то это приведет к ошибке, опубликованной в заголовке. Когда я проверил предварительную обработку с использованием опции g++ -E
, то и строки «ok» & «ошибки» выглядят одинаково.
Почему эта ошибка связана с макросом?
Ваш анализ кажется правильным для меня. Это скорее ошибка gcc. – iammilind