Вызов методов временного объекта дает ошибку компилятора с более старой библиотекой c - PullRequest
2 голосов
/ 19 февраля 2010

У меня странная проблема с моим кодом при портировании с компьютера с glibc-2.5-25 (suse 10.2) на компьютер с glibc-2.3.2-6 (suse 8.2).Я использую несколько вызовов методов для временных объектов, и они не работают на более старой машине.

class A
{
public:
    A(int n) {}
    void method() {}
};

int main()
{
    A(10).method(); //here the compiler gives parse error before . 

    A a(10);
    a.method(); //this works fine 
}

Может ли это действительно произойти из-за более старой версии libc или это может быть настройка в моей IDE (настройка компилятора)

Ответы [ 2 ]

2 голосов
/ 19 февраля 2010

Почему версия libc влияет на ошибку разбора? Версия g ++ была бы более полезной.

gcc изменил свой синтаксический анализатор по сравнению с версией 3.4 и решил в то время множество проблем с синтаксическим анализом, которые было нелегко исправить в старом парсере yacc. Это может объяснить то, что вы видите.

1 голос
/ 20 февраля 2010

Кажется, это ошибка компилятора: http://gcc.gnu.org/ml/gcc-bugs/1998-10/msg00178.html (старая версия, та же ошибка). Обходной путь с идентичной семантикой будет выглядеть примерно так:

#define TEMP(T, x, y) { T _temporary(x); _temporary.y; }

A(10).method(); // is:
TEMP(A, 10, method())

Тьфу.

...