2010-02-19 1 views
2

J'ai un problème étrange avec mon code lors du portage d'un ordinateur avec glibc-2.5-25 (suse 10.2) vers un ordinateur avec glibc-2.3.2-6 (suse 8.2). J'utilise plusieurs appels de méthodes sur des objets temporaires et ils ne fonctionnent pas sur l'ancienne machine.L'appel des méthodes de l'objet temporaire donne une erreur de compilation avec l'ancienne bibliothèque c

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 
} 

Cela pourrait-il vraiment se produire à cause de la version antérieure libc ou il pourrait être un paramètre dans mon IDE (réglage du compilateur)?

+0

glibc est une bibliothèque - c'est un problème de compilation. –

+0

Quelle version du compilateur utilisez-vous? –

+0

Oui, vous avez raison, les versions gcc sont les suivantes: gcc-4.1.3-29 sur la nouvelle plate-forme gcc-3.3-23 sur le plus ancien (avec des problèmes) – user265149

Répondre

2

Pourquoi la version libc influence-t-elle une erreur d'analyse? La version g ++ serait plus utile. Gcc a changé son analyseur autour de la version 3.4 et a résolu à l'époque beaucoup de problèmes d'analyse qui n'étaient pas faciles à résoudre dans l'ancien analyseur yacc. Cela pourrait expliquer ce que vous voyez.

1

Cela semble être un bug du compilateur: http://gcc.gnu.org/ml/gcc-bugs/1998-10/msg00178.html (ancienne version, même bug). Une solution de contournement avec une sémantique identique serait quelque chose comme:

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

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

Yuck.

Questions connexes