Fabien LE LEZ writes:On 25 Oct 2005 11:55:35 +0200, Jean-Marc Bourguet :La seule proposition que j'avais reellement a coeur de pouvoir faire
pour la prochaine revision de la norme etait un typedef introduisant
un nouveau type.
C'est vrai que ce serait très agréable...Malheureusement, plus j'ai plonge dans les details
de la chose, moins ca m'a semble possible de maniere saine.
J'avais pensé à appliquer grosso modo les mêmes règles que pour
l'héritage (i.e. on "fait comme si" T hérite de U et U hérite de T),
mais j'avoue manquer de vision d'ensemble pour m'apercevoir de tous
les problèmes.
Un des objectifs d'un typedef fort est justement de ne pas pouvoir
utiliser un type pour l'autre.
A+
si je fait
Fabien LE LEZ <gramster@gramster.com> writes:
On 25 Oct 2005 11:55:35 +0200, Jean-Marc Bourguet <jm@bourguet.org>:
La seule proposition que j'avais reellement a coeur de pouvoir faire
pour la prochaine revision de la norme etait un typedef introduisant
un nouveau type.
C'est vrai que ce serait très agréable...
Malheureusement, plus j'ai plonge dans les details
de la chose, moins ca m'a semble possible de maniere saine.
J'avais pensé à appliquer grosso modo les mêmes règles que pour
l'héritage (i.e. on "fait comme si" T hérite de U et U hérite de T),
mais j'avoue manquer de vision d'ensemble pour m'apercevoir de tous
les problèmes.
Un des objectifs d'un typedef fort est justement de ne pas pouvoir
utiliser un type pour l'autre.
A+
si je fait
Fabien LE LEZ writes:On 25 Oct 2005 11:55:35 +0200, Jean-Marc Bourguet :La seule proposition que j'avais reellement a coeur de pouvoir faire
pour la prochaine revision de la norme etait un typedef introduisant
un nouveau type.
C'est vrai que ce serait très agréable...Malheureusement, plus j'ai plonge dans les details
de la chose, moins ca m'a semble possible de maniere saine.
J'avais pensé à appliquer grosso modo les mêmes règles que pour
l'héritage (i.e. on "fait comme si" T hérite de U et U hérite de T),
mais j'avoue manquer de vision d'ensemble pour m'apercevoir de tous
les problèmes.
Un des objectifs d'un typedef fort est justement de ne pas pouvoir
utiliser un type pour l'autre.
A+
si je fait
Jean-Marc Bourguet wrote:Fabien LE LEZ writes:On 25 Oct 2005 11:55:35 +0200, Jean-Marc Bourguet :La seule proposition que j'avais reellement a coeur de pouvoir faire
pour la prochaine revision de la norme etait un typedef introduisant
un nouveau type.
C'est vrai que ce serait très agréable...Malheureusement, plus j'ai plonge dans les details
de la chose, moins ca m'a semble possible de maniere saine.
J'avais pensé à appliquer grosso modo les mêmes règles que pour
l'héritage (i.e. on "fait comme si" T hérite de U et U hérite de T),
mais j'avoue manquer de vision d'ensemble pour m'apercevoir de tous
les problèmes.
Un des objectifs d'un typedef fort est justement de ne pas pouvoir
utiliser un type pour l'autre.
A+
si je fait
typedef int taille_en_metre;
typedef int age;
j'aimerais bien que:
taille_en_metre longueur_du_bateau = 100;
age age_du_capitaine = 0;
age_du_capitaine = longueur_du_bateau; //error cast impossible
ne compile pas.
C'est ça de quoi vous parlez ?
Jean-Marc Bourguet wrote:
Fabien LE LEZ <gramster@gramster.com> writes:
On 25 Oct 2005 11:55:35 +0200, Jean-Marc Bourguet <jm@bourguet.org>:
La seule proposition que j'avais reellement a coeur de pouvoir faire
pour la prochaine revision de la norme etait un typedef introduisant
un nouveau type.
C'est vrai que ce serait très agréable...
Malheureusement, plus j'ai plonge dans les details
de la chose, moins ca m'a semble possible de maniere saine.
J'avais pensé à appliquer grosso modo les mêmes règles que pour
l'héritage (i.e. on "fait comme si" T hérite de U et U hérite de T),
mais j'avoue manquer de vision d'ensemble pour m'apercevoir de tous
les problèmes.
Un des objectifs d'un typedef fort est justement de ne pas pouvoir
utiliser un type pour l'autre.
A+
si je fait
typedef int taille_en_metre;
typedef int age;
j'aimerais bien que:
taille_en_metre longueur_du_bateau = 100;
age age_du_capitaine = 0;
age_du_capitaine = longueur_du_bateau; //error cast impossible
ne compile pas.
C'est ça de quoi vous parlez ?
Jean-Marc Bourguet wrote:Fabien LE LEZ writes:On 25 Oct 2005 11:55:35 +0200, Jean-Marc Bourguet :La seule proposition que j'avais reellement a coeur de pouvoir faire
pour la prochaine revision de la norme etait un typedef introduisant
un nouveau type.
C'est vrai que ce serait très agréable...Malheureusement, plus j'ai plonge dans les details
de la chose, moins ca m'a semble possible de maniere saine.
J'avais pensé à appliquer grosso modo les mêmes règles que pour
l'héritage (i.e. on "fait comme si" T hérite de U et U hérite de T),
mais j'avoue manquer de vision d'ensemble pour m'apercevoir de tous
les problèmes.
Un des objectifs d'un typedef fort est justement de ne pas pouvoir
utiliser un type pour l'autre.
A+
si je fait
typedef int taille_en_metre;
typedef int age;
j'aimerais bien que:
taille_en_metre longueur_du_bateau = 100;
age age_du_capitaine = 0;
age_du_capitaine = longueur_du_bateau; //error cast impossible
ne compile pas.
C'est ça de quoi vous parlez ?
Jean-Marc Bourguet wrote:Fabien LE LEZ writes:
Un des objectifs d'un typedef fort est justement de ne pas pouvoir
utiliser un type pour l'autre.
si je fait
typedef int taille_en_metre;
typedef int age;
j'aimerais bien que:
taille_en_metre longueur_du_bateau = 100;
age age_du_capitaine = 0;
age_du_capitaine = longueur_du_bateau; //error cast impossible
ne compile pas.
C'est ça de quoi vous parlez ?
Jean-Marc Bourguet wrote:
Fabien LE LEZ <gramster@gramster.com> writes:
Un des objectifs d'un typedef fort est justement de ne pas pouvoir
utiliser un type pour l'autre.
si je fait
typedef int taille_en_metre;
typedef int age;
j'aimerais bien que:
taille_en_metre longueur_du_bateau = 100;
age age_du_capitaine = 0;
age_du_capitaine = longueur_du_bateau; //error cast impossible
ne compile pas.
C'est ça de quoi vous parlez ?
Jean-Marc Bourguet wrote:Fabien LE LEZ writes:
Un des objectifs d'un typedef fort est justement de ne pas pouvoir
utiliser un type pour l'autre.
si je fait
typedef int taille_en_metre;
typedef int age;
j'aimerais bien que:
taille_en_metre longueur_du_bateau = 100;
age age_du_capitaine = 0;
age_du_capitaine = longueur_du_bateau; //error cast impossible
ne compile pas.
C'est ça de quoi vous parlez ?
Oui. Et d'un tas de problemes annexes (parmi lesquel j'avais espere
pouvoir mettre une "forward declaration" pour les typedef).
int x;
age = x; // est-ce que ca doit etre possible?
x = age; // est-ce que ca doit etre possible?
age = age + 3; // possible? d'ou vient le +?
age = abs(age); // possible? d'ou vient abs?
int f(int);
age = f(age); // possible? comparer avec abs, c'est nettement moins desirable
int NS::f(int);
age = NS::f(age); // possible? encore moins desirable
Oui. Et d'un tas de problemes annexes (parmi lesquel j'avais espere
pouvoir mettre une "forward declaration" pour les typedef).
int x;
age = x; // est-ce que ca doit etre possible?
x = age; // est-ce que ca doit etre possible?
age = age + 3; // possible? d'ou vient le +?
age = abs(age); // possible? d'ou vient abs?
int f(int);
age = f(age); // possible? comparer avec abs, c'est nettement moins desirable
int NS::f(int);
age = NS::f(age); // possible? encore moins desirable
Oui. Et d'un tas de problemes annexes (parmi lesquel j'avais espere
pouvoir mettre une "forward declaration" pour les typedef).
int x;
age = x; // est-ce que ca doit etre possible?
x = age; // est-ce que ca doit etre possible?
age = age + 3; // possible? d'ou vient le +?
age = abs(age); // possible? d'ou vient abs?
int f(int);
age = f(age); // possible? comparer avec abs, c'est nettement moins desirable
int NS::f(int);
age = NS::f(age); // possible? encore moins desirable
Le 25-10-2005, Jean-Marc Bourguet a écrit :Oui. Et d'un tas de problemes annexes (parmi lesquel j'avais espere
pouvoir mettre une "forward declaration" pour les typedef).
int x;
age = x; // est-ce que ca doit etre possible?
x = age; // est-ce que ca doit etre possible?
Ces deux là me semblent du ressort de l'utilisateur,
non ?
age = age + 3; // possible? d'ou vient le +?
Ca, c'est horrible.age = abs(age); // possible? d'ou vient abs?
int f(int);
age = f(age); // possible? comparer avec abs, c'est nettement moins desirable
int NS::f(int);
age = NS::f(age); // possible? encore moins desirable
Je vois pas bien pourquoi f et NS::f seraient différents ?
Tu as deux minutes pour m'expliquer ?
Le 25-10-2005, Jean-Marc Bourguet <jm@bourguet.org> a écrit :
Oui. Et d'un tas de problemes annexes (parmi lesquel j'avais espere
pouvoir mettre une "forward declaration" pour les typedef).
int x;
age = x; // est-ce que ca doit etre possible?
x = age; // est-ce que ca doit etre possible?
Ces deux là me semblent du ressort de l'utilisateur,
non ?
age = age + 3; // possible? d'ou vient le +?
Ca, c'est horrible.
age = abs(age); // possible? d'ou vient abs?
int f(int);
age = f(age); // possible? comparer avec abs, c'est nettement moins desirable
int NS::f(int);
age = NS::f(age); // possible? encore moins desirable
Je vois pas bien pourquoi f et NS::f seraient différents ?
Tu as deux minutes pour m'expliquer ?
Le 25-10-2005, Jean-Marc Bourguet a écrit :Oui. Et d'un tas de problemes annexes (parmi lesquel j'avais espere
pouvoir mettre une "forward declaration" pour les typedef).
int x;
age = x; // est-ce que ca doit etre possible?
x = age; // est-ce que ca doit etre possible?
Ces deux là me semblent du ressort de l'utilisateur,
non ?
age = age + 3; // possible? d'ou vient le +?
Ca, c'est horrible.age = abs(age); // possible? d'ou vient abs?
int f(int);
age = f(age); // possible? comparer avec abs, c'est nettement moins desirable
int NS::f(int);
age = NS::f(age); // possible? encore moins desirable
Je vois pas bien pourquoi f et NS::f seraient différents ?
Tu as deux minutes pour m'expliquer ?
Marc Boyer writes:Le 25-10-2005, Jean-Marc Bourguet a écrit :Oui. Et d'un tas de problemes annexes (parmi lesquel j'avais espere
pouvoir mettre une "forward declaration" pour les typedef).
int x;
age = x; // est-ce que ca doit etre possible?
x = age; // est-ce que ca doit etre possible?
Ces deux là me semblent du ressort de l'utilisateur,
non ?
C'est une possibilite. J'aurais simplement tendance a accepter les
static_cast et puis c'est tout.
int f(int);
age = f(age); // possible? comparer avec abs, c'est nettement moins desirable
int NS::f(int);
age = NS::f(age); // possible? encore moins desirable
Je vois pas bien pourquoi f et NS::f seraient différents ?
Tu as deux minutes pour m'expliquer ?
Le probleme c'est que c'est difficile de rendre f different de abs
(sans compter qu'abs est aussi dans std...)
L'idee est que quand on cree un nouveau type en "copiant" un autre,
les operations de base sur ce type existent pour le nouveau. Le tout
est d'arriver a savoir ce que sont les operations de base;
une idee
c'est ce qui est defini dans le meme namespace (c'est en gros la
logique de l'ADL) mais pour le namespace global ca peut etre beaucoup,
et quel est le namespace dans lequel sont definis les types de base?
package P is
type X is ...;
procedure F(An_X : X);
package S is
procedure G(An_X : X);
end S;
end P;
with P;
package P2 is
type Y is new X;
-- procedure F(An_X : Y) existe mais pas S.G().
end P2;
Pas sur d'avoir ete clair, mais j'ai pas le temps de faire mieux.
Marc Boyer <Marc.Boyer@enseeiht.yahoo.fr.invalid> writes:
Le 25-10-2005, Jean-Marc Bourguet <jm@bourguet.org> a écrit :
Oui. Et d'un tas de problemes annexes (parmi lesquel j'avais espere
pouvoir mettre une "forward declaration" pour les typedef).
int x;
age = x; // est-ce que ca doit etre possible?
x = age; // est-ce que ca doit etre possible?
Ces deux là me semblent du ressort de l'utilisateur,
non ?
C'est une possibilite. J'aurais simplement tendance a accepter les
static_cast et puis c'est tout.
int f(int);
age = f(age); // possible? comparer avec abs, c'est nettement moins desirable
int NS::f(int);
age = NS::f(age); // possible? encore moins desirable
Je vois pas bien pourquoi f et NS::f seraient différents ?
Tu as deux minutes pour m'expliquer ?
Le probleme c'est que c'est difficile de rendre f different de abs
(sans compter qu'abs est aussi dans std...)
L'idee est que quand on cree un nouveau type en "copiant" un autre,
les operations de base sur ce type existent pour le nouveau. Le tout
est d'arriver a savoir ce que sont les operations de base;
une idee
c'est ce qui est defini dans le meme namespace (c'est en gros la
logique de l'ADL) mais pour le namespace global ca peut etre beaucoup,
et quel est le namespace dans lequel sont definis les types de base?
package P is
type X is ...;
procedure F(An_X : X);
package S is
procedure G(An_X : X);
end S;
end P;
with P;
package P2 is
type Y is new X;
-- procedure F(An_X : Y) existe mais pas S.G().
end P2;
Pas sur d'avoir ete clair, mais j'ai pas le temps de faire mieux.
Marc Boyer writes:Le 25-10-2005, Jean-Marc Bourguet a écrit :Oui. Et d'un tas de problemes annexes (parmi lesquel j'avais espere
pouvoir mettre une "forward declaration" pour les typedef).
int x;
age = x; // est-ce que ca doit etre possible?
x = age; // est-ce que ca doit etre possible?
Ces deux là me semblent du ressort de l'utilisateur,
non ?
C'est une possibilite. J'aurais simplement tendance a accepter les
static_cast et puis c'est tout.
int f(int);
age = f(age); // possible? comparer avec abs, c'est nettement moins desirable
int NS::f(int);
age = NS::f(age); // possible? encore moins desirable
Je vois pas bien pourquoi f et NS::f seraient différents ?
Tu as deux minutes pour m'expliquer ?
Le probleme c'est que c'est difficile de rendre f different de abs
(sans compter qu'abs est aussi dans std...)
L'idee est que quand on cree un nouveau type en "copiant" un autre,
les operations de base sur ce type existent pour le nouveau. Le tout
est d'arriver a savoir ce que sont les operations de base;
une idee
c'est ce qui est defini dans le meme namespace (c'est en gros la
logique de l'ADL) mais pour le namespace global ca peut etre beaucoup,
et quel est le namespace dans lequel sont definis les types de base?
package P is
type X is ...;
procedure F(An_X : X);
package S is
procedure G(An_X : X);
end S;
end P;
with P;
package P2 is
type Y is new X;
-- procedure F(An_X : Y) existe mais pas S.G().
end P2;
Pas sur d'avoir ete clair, mais j'ai pas le temps de faire mieux.
Jean-Marc Bourguet wrote:Fabien LE LEZ writes:On 25 Oct 2005 11:55:35 +0200, Jean-Marc Bourguet :La seule proposition que j'avais reellement a coeur de pouvoir
faire pour la prochaine revision de la norme etait un typedef
introduisant un nouveau type.
C'est vrai que ce serait très agréable...Malheureusement, plus j'ai plonge dans les details
de la chose, moins ca m'a semble possible de maniere saine.
J'avais pensé à appliquer grosso modo les mêmes règles que pour
l'héritage (i.e. on "fait comme si" T hérite de U et U hérite de T),
mais j'avoue manquer de vision d'ensemble pour m'apercevoir de tous
les problèmes.
Un des objectifs d'un typedef fort est justement de ne pas pouvoir
utiliser un type pour l'autre.
A+
si je fait
typedef int taille_en_metre;
typedef int age;
j'aimerais bien que:
taille_en_metre longueur_du_bateau = 100;
age age_du_capitaine = 0;
age_du_capitaine = longueur_du_bateau; //error cast impossible
ne compile pas.
Jean-Marc Bourguet wrote:
Fabien LE LEZ <gramster@gramster.com> writes:
On 25 Oct 2005 11:55:35 +0200, Jean-Marc Bourguet <jm@bourguet.org>:
La seule proposition que j'avais reellement a coeur de pouvoir
faire pour la prochaine revision de la norme etait un typedef
introduisant un nouveau type.
C'est vrai que ce serait très agréable...
Malheureusement, plus j'ai plonge dans les details
de la chose, moins ca m'a semble possible de maniere saine.
J'avais pensé à appliquer grosso modo les mêmes règles que pour
l'héritage (i.e. on "fait comme si" T hérite de U et U hérite de T),
mais j'avoue manquer de vision d'ensemble pour m'apercevoir de tous
les problèmes.
Un des objectifs d'un typedef fort est justement de ne pas pouvoir
utiliser un type pour l'autre.
A+
si je fait
typedef int taille_en_metre;
typedef int age;
j'aimerais bien que:
taille_en_metre longueur_du_bateau = 100;
age age_du_capitaine = 0;
age_du_capitaine = longueur_du_bateau; //error cast impossible
ne compile pas.
Jean-Marc Bourguet wrote:Fabien LE LEZ writes:On 25 Oct 2005 11:55:35 +0200, Jean-Marc Bourguet :La seule proposition que j'avais reellement a coeur de pouvoir
faire pour la prochaine revision de la norme etait un typedef
introduisant un nouveau type.
C'est vrai que ce serait très agréable...Malheureusement, plus j'ai plonge dans les details
de la chose, moins ca m'a semble possible de maniere saine.
J'avais pensé à appliquer grosso modo les mêmes règles que pour
l'héritage (i.e. on "fait comme si" T hérite de U et U hérite de T),
mais j'avoue manquer de vision d'ensemble pour m'apercevoir de tous
les problèmes.
Un des objectifs d'un typedef fort est justement de ne pas pouvoir
utiliser un type pour l'autre.
A+
si je fait
typedef int taille_en_metre;
typedef int age;
j'aimerais bien que:
taille_en_metre longueur_du_bateau = 100;
age age_du_capitaine = 0;
age_du_capitaine = longueur_du_bateau; //error cast impossible
ne compile pas.
typedef int taille_en_metre;
typedef int age;
j'aimerais bien que:
taille_en_metre longueur_du_bateau = 100;
age age_du_capitaine = 0;
age_du_capitaine = longueur_du_bateau; //error cast impossible
typedef int taille_en_metre;
typedef int age;
j'aimerais bien que:
taille_en_metre longueur_du_bateau = 100;
age age_du_capitaine = 0;
age_du_capitaine = longueur_du_bateau; //error cast impossible
typedef int taille_en_metre;
typedef int age;
j'aimerais bien que:
taille_en_metre longueur_du_bateau = 100;
age age_du_capitaine = 0;
age_du_capitaine = longueur_du_bateau; //error cast impossible
On Tue, 25 Oct 2005 13:32:35 +0200, JBB :typedef int taille_en_metre;
typedef int age;
j'aimerais bien que:
taille_en_metre longueur_du_bateau = 100;
age age_du_capitaine = 0;
age_du_capitaine = longueur_du_bateau; //error cast impossible
Euh... J'ai dû rater quelque chose, car je ne vois pas bien l'utilité
de rajouter un truc dans le langage.
template <class T, class identifiant_unique>
class PseudoTypedef
{
public:
PseudoTypedef (T const& t= T());
// Ici, les fonctions dont tu as besoin -- ==, <, etc.
};
class BIDON_taille_en_metres {};
typedef PseudoTypedef <int, BIDON_taille_en_metres> taille_en_metres;
class BIDON_age {};
typedef PseudoTypedef <int, BIDON_age> age;
int main()
{
taille_en_metres longueur_du_bateau = 100;
age age_du_capitaine = 0;
age_du_capitaine = longueur_du_bateau; //error cast impossible
}
On Tue, 25 Oct 2005 13:32:35 +0200, JBB <merci@pasdespam.fr>:
typedef int taille_en_metre;
typedef int age;
j'aimerais bien que:
taille_en_metre longueur_du_bateau = 100;
age age_du_capitaine = 0;
age_du_capitaine = longueur_du_bateau; //error cast impossible
Euh... J'ai dû rater quelque chose, car je ne vois pas bien l'utilité
de rajouter un truc dans le langage.
template <class T, class identifiant_unique>
class PseudoTypedef
{
public:
PseudoTypedef (T const& t= T());
// Ici, les fonctions dont tu as besoin -- ==, <, etc.
};
class BIDON_taille_en_metres {};
typedef PseudoTypedef <int, BIDON_taille_en_metres> taille_en_metres;
class BIDON_age {};
typedef PseudoTypedef <int, BIDON_age> age;
int main()
{
taille_en_metres longueur_du_bateau = 100;
age age_du_capitaine = 0;
age_du_capitaine = longueur_du_bateau; //error cast impossible
}
On Tue, 25 Oct 2005 13:32:35 +0200, JBB :typedef int taille_en_metre;
typedef int age;
j'aimerais bien que:
taille_en_metre longueur_du_bateau = 100;
age age_du_capitaine = 0;
age_du_capitaine = longueur_du_bateau; //error cast impossible
Euh... J'ai dû rater quelque chose, car je ne vois pas bien l'utilité
de rajouter un truc dans le langage.
template <class T, class identifiant_unique>
class PseudoTypedef
{
public:
PseudoTypedef (T const& t= T());
// Ici, les fonctions dont tu as besoin -- ==, <, etc.
};
class BIDON_taille_en_metres {};
typedef PseudoTypedef <int, BIDON_taille_en_metres> taille_en_metres;
class BIDON_age {};
typedef PseudoTypedef <int, BIDON_age> age;
int main()
{
taille_en_metres longueur_du_bateau = 100;
age age_du_capitaine = 0;
age_du_capitaine = longueur_du_bateau; //error cast impossible
}
Après, le besoin de Jean-Marc (il me semble) un nouveau type,
incompatible, qui récupère toutes les opérations.
Après, le besoin de Jean-Marc (il me semble) un nouveau type,
incompatible, qui récupère toutes les opérations.
Après, le besoin de Jean-Marc (il me semble) un nouveau type,
incompatible, qui récupère toutes les opérations.