writes:
| > Alors <fstream> peut, de manière interne, n'inclure que ces
| > entêtes (internes) avec le résultat qu'il n'a pas à inclure
| > l'intégralité de <istream> ou <ostream> dans <fstream>.
| Selon la norme, std::istream est défini dans <istream>, et non
| ailleurs.
Yep. Mais la norme n'immpose pas à l'implémentation comment elle doit
faire pour disposer de la définitonde std::istream là où elle en a
besoin.
De fait, nous avons fait quelque chose comme ça pour std::char_traits
-- la seule manière pour l'utilisateur de l'avoir c'est d'inclure
<string> ; mais l'implémentation peut faire autement. Récemment nous
avons changé les dépendances pour d'autres raisons.
| La norme donne le droit à une implémentation d'inclure d'autres
| en-têtes standard depuis un en-tête standard.
Tout à fait -- mais l'implémentation peut s'en passer, et ce n'est pas
de la spéculation.
| Elle ne lui donne pas le droit à faire n'importe quoi.
Qu'est-ce que ça veut dire ici « n'importe quoi » ?
| Si j'inclus <iostream>, ou <fstream>, je ne sais pas d'office
| (d'après la norme) si <istream> a été inclu.
Exact.
| Mais si std::istream est défini, je sais (d'après la norme) que
| <istream> a été inclu,
Bah non. La norme ne dit pas ça.
| et que donc les autres opérateurs << définis dans <istream> sont
| disponibles. Ou bien, j'ai le contenu de <istream>, ou bien, je ne
| l'ai pas, mais je ne peux pas en avoir la moitié.
As-tu un programme conforme qui le détecte ?
kanze@gabi-soft.fr writes:
| > Alors <fstream> peut, de manière interne, n'inclure que ces
| > entêtes (internes) avec le résultat qu'il n'a pas à inclure
| > l'intégralité de <istream> ou <ostream> dans <fstream>.
| Selon la norme, std::istream est défini dans <istream>, et non
| ailleurs.
Yep. Mais la norme n'immpose pas à l'implémentation comment elle doit
faire pour disposer de la définitonde std::istream là où elle en a
besoin.
De fait, nous avons fait quelque chose comme ça pour std::char_traits
-- la seule manière pour l'utilisateur de l'avoir c'est d'inclure
<string> ; mais l'implémentation peut faire autement. Récemment nous
avons changé les dépendances pour d'autres raisons.
| La norme donne le droit à une implémentation d'inclure d'autres
| en-têtes standard depuis un en-tête standard.
Tout à fait -- mais l'implémentation peut s'en passer, et ce n'est pas
de la spéculation.
| Elle ne lui donne pas le droit à faire n'importe quoi.
Qu'est-ce que ça veut dire ici « n'importe quoi » ?
| Si j'inclus <iostream>, ou <fstream>, je ne sais pas d'office
| (d'après la norme) si <istream> a été inclu.
Exact.
| Mais si std::istream est défini, je sais (d'après la norme) que
| <istream> a été inclu,
Bah non. La norme ne dit pas ça.
| et que donc les autres opérateurs << définis dans <istream> sont
| disponibles. Ou bien, j'ai le contenu de <istream>, ou bien, je ne
| l'ai pas, mais je ne peux pas en avoir la moitié.
As-tu un programme conforme qui le détecte ?
writes:
| > Alors <fstream> peut, de manière interne, n'inclure que ces
| > entêtes (internes) avec le résultat qu'il n'a pas à inclure
| > l'intégralité de <istream> ou <ostream> dans <fstream>.
| Selon la norme, std::istream est défini dans <istream>, et non
| ailleurs.
Yep. Mais la norme n'immpose pas à l'implémentation comment elle doit
faire pour disposer de la définitonde std::istream là où elle en a
besoin.
De fait, nous avons fait quelque chose comme ça pour std::char_traits
-- la seule manière pour l'utilisateur de l'avoir c'est d'inclure
<string> ; mais l'implémentation peut faire autement. Récemment nous
avons changé les dépendances pour d'autres raisons.
| La norme donne le droit à une implémentation d'inclure d'autres
| en-têtes standard depuis un en-tête standard.
Tout à fait -- mais l'implémentation peut s'en passer, et ce n'est pas
de la spéculation.
| Elle ne lui donne pas le droit à faire n'importe quoi.
Qu'est-ce que ça veut dire ici « n'importe quoi » ?
| Si j'inclus <iostream>, ou <fstream>, je ne sais pas d'office
| (d'après la norme) si <istream> a été inclu.
Exact.
| Mais si std::istream est défini, je sais (d'après la norme) que
| <istream> a été inclu,
Bah non. La norme ne dit pas ça.
| et que donc les autres opérateurs << définis dans <istream> sont
| disponibles. Ou bien, j'ai le contenu de <istream>, ou bien, je ne
| l'ai pas, mais je ne peux pas en avoir la moitié.
As-tu un programme conforme qui le détecte ?