C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

variable statique dans une fonction inline d'une classe temp

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Gilles
Guest





PostPosted: Thu Aug 18, 2005 10:48 am    Post subject: variable statique dans une fonction inline d'une classe temp Reply with quote



Bonjour,

Quelqu'un peut-il m'expliquer le warning que j'obtiens dans le code
ci-dessous ?

Merci d'avance,

Gilles.



template <typename A, typename B>
class C
{
public:
class H
{
public:
H()
{
static bool init = true;

// WARNING: sorry: semantics of inline function static data `bool init' are
// wrong (you'll wind up with multiple copies)
// you can work around this by removing the initializer

if (init)
i = 0;
init = false;
}
int i;
};

static H& GetH()
{
static H s_h;
return s_h;
}
};


Back to top
Arnaud Meurgues
Guest





PostPosted: Thu Aug 18, 2005 1:28 pm    Post subject: Re: variable statique dans une fonction inline d'une classe Reply with quote



Gilles wrote:

Quote:
Quelqu'un peut-il m'expliquer le warning que j'obtiens dans le code
ci-dessous ?

Je ne suis pas sûr, mais ne veut-il pas dire que la statique ne sera pas
partagée par toutes les instances du template ?
Bon, le message n'est pas clair, mais ce pourrait être ça ?

--
Arnaud

Back to top
kanze@gabi-soft.fr
Guest





PostPosted: Tue Aug 23, 2005 8:18 am    Post subject: Re: variable statique dans une fonction inline d'une classe Reply with quote



Arnaud Meurgues wrote:
Quote:
Gilles wrote:

Quelqu'un peut-il m'expliquer le warning que j'obtiens dans
le code ci-dessous ?

Je ne suis pas sûr, mais ne veut-il pas dire que la statique
ne sera pas partagée par toutes les instances du template ?

S'agit-il d'un ancien compilateur ? La norme exige qu'il n'y a
qu'une seule instance de la variable pour chaque instantiation
du template, mais avant la norme, la plupart des compilateurs en
créaient une instance par unité de traduction où la fonction
servait.

Si c'est le cas, la solution évidente, c'est une mise à jour du
compilateur. Faute de quoi, on pourrait toujours essayer un
static membre de la classe.

Quote:
Bon, le message n'est pas clair, mais ce pourrait être ça ?

C'est possible aussi. Quelque petits essais avec un static int
qu'on incrémente doit suffire pour déterminer le comportement
exacte du compilateur. Mais a priori, il n'y a rien de faux dans
son code, et je ne m'attendrais pas à un avertissement d'un
compilateur moderne.

Il pourrait aussi essayer la même chose sans le template, juste
pour voir. Mais je serais surtout intéressé à savoir la version
du compilateur.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34


Back to top
Gilles
Guest





PostPosted: Tue Aug 23, 2005 9:08 am    Post subject: Re: variable statique dans une fonction inline d'une classe Reply with quote

| Si c'est le cas, la solution évidente, c'est une mise à jour du
Quote:
compilateur. Faute de quoi, on pourrait toujours essayer un
static membre de la classe.

Je ne peux pas obliger mon client à changer de compilateur, je retiens donc
la deuxième option.

Quote:
Mais je serais surtout intéressé à savoir la version
du compilateur.

ProDG for PlayStation2 (de SN Systems), dernière version.
Pour info, je compile mon code sans aucun problème avec une bonne dizaine de
compilateurs. Le problème semble bien venir de ProDG.

Merci pour les infos.

Gilles.




Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.