Bonjour,
Le morceau de code suivant ne compile pas avec le compilateur GCC 3.4.2. Il
compile cepedant avec les compilateurs de Sun, SGI et GCC 3.3 et 3.5. Je me
demdande donc si c'est un bug du compilateur ou une nouvelle subtilité de
la norme C++ :
namespace nmr {
template <class T> void helper();
}
template <class T> void nmr::helper() {
}
template <> void nmr::helper<char>() {
}
Le message d'erreur est :
foo.cc:7: error: specialization of `template<class T> void nmr::helper()' in
different namespace
foo.cc:5: error: from definition of `template<class T> void nmr::helper()'
Bonjour,
Le morceau de code suivant ne compile pas avec le compilateur GCC 3.4.2. Il
compile cepedant avec les compilateurs de Sun, SGI et GCC 3.3 et 3.5. Je me
demdande donc si c'est un bug du compilateur ou une nouvelle subtilité de
la norme C++ :
namespace nmr {
template <class T> void helper();
}
template <class T> void nmr::helper() {
}
template <> void nmr::helper<char>() {
}
Le message d'erreur est :
foo.cc:7: error: specialization of `template<class T> void nmr::helper()' in
different namespace
foo.cc:5: error: from definition of `template<class T> void nmr::helper()'
Bonjour,
Le morceau de code suivant ne compile pas avec le compilateur GCC 3.4.2. Il
compile cepedant avec les compilateurs de Sun, SGI et GCC 3.3 et 3.5. Je me
demdande donc si c'est un bug du compilateur ou une nouvelle subtilité de
la norme C++ :
namespace nmr {
template <class T> void helper();
}
template <class T> void nmr::helper() {
}
template <> void nmr::helper<char>() {
}
Le message d'erreur est :
foo.cc:7: error: specialization of `template<class T> void nmr::helper()' in
different namespace
foo.cc:5: error: from definition of `template<class T> void nmr::helper()'
Accepter le code m'a l'air d'un bug. Mais ce qui m'etonne c'est la
regression dans gcc (pas fixe, fixe, pas fixe). Pour info,
"ComeauTest.c", line 6: error: the initial explicit specialization of
function
"nmr::helper<T>() [with T=char]" must be declared in the
namespace containing the template
template <> void nmr::helper<char>() {
^
1 error detected in the compilation of "ComeauTest.c".
Accepter le code m'a l'air d'un bug. Mais ce qui m'etonne c'est la
regression dans gcc (pas fixe, fixe, pas fixe). Pour info,
"ComeauTest.c", line 6: error: the initial explicit specialization of
function
"nmr::helper<T>() [with T=char]" must be declared in the
namespace containing the template
template <> void nmr::helper<char>() {
^
1 error detected in the compilation of "ComeauTest.c".
Accepter le code m'a l'air d'un bug. Mais ce qui m'etonne c'est la
regression dans gcc (pas fixe, fixe, pas fixe). Pour info,
"ComeauTest.c", line 6: error: the initial explicit specialization of
function
"nmr::helper<T>() [with T=char]" must be declared in the
namespace containing the template
template <> void nmr::helper<char>() {
^
1 error detected in the compilation of "ComeauTest.c".
Le message d'erreur semble clair. J'imagine donc qu'il s'agit d'une de ces
obscures subtilités du langage C++ qui sont peu à peu implementée s dans les
compilateurs.
Quelqu'un connait-il le paragraphe correspondant de la norme ?
§ 14.7.3/2 : "An explicit specialization shall be declared in the names pace
Le message d'erreur semble clair. J'imagine donc qu'il s'agit d'une de ces
obscures subtilités du langage C++ qui sont peu à peu implementée s dans les
compilateurs.
Quelqu'un connait-il le paragraphe correspondant de la norme ?
§ 14.7.3/2 : "An explicit specialization shall be declared in the names pace
Le message d'erreur semble clair. J'imagine donc qu'il s'agit d'une de ces
obscures subtilités du langage C++ qui sont peu à peu implementée s dans les
compilateurs.
Quelqu'un connait-il le paragraphe correspondant de la norme ?
§ 14.7.3/2 : "An explicit specialization shall be declared in the names pace
Cyril Poupon wrote:Le message d'erreur semble clair. J'imagine donc qu'il s'agit d'une de ces
obscures subtilités du langage C++ qui sont peu à peu implementées dans les
compilateurs.
Quelqu'un connait-il le paragraphe correspondant de la norme ?
§ 14.7.3/2 : "An explicit specialization shall be declared in the namespace
of which the template is a member..."
§ 7.3.1.2/2 : "Members of a named namespace can also be defined outside
that namespace by explicit qualification (3.4.3.2) of the name
being defined, provided that the entity being defined was already
declared in the namespace and the definition appears after the
point of declaration in a namespace that encloses the
declaration's namespace."
ne s'applique donc pas dans le cas d'une spécialisation explicite,
il faut écrire
Cyril Poupon wrote:
Le message d'erreur semble clair. J'imagine donc qu'il s'agit d'une de ces
obscures subtilités du langage C++ qui sont peu à peu implementées dans les
compilateurs.
Quelqu'un connait-il le paragraphe correspondant de la norme ?
§ 14.7.3/2 : "An explicit specialization shall be declared in the namespace
of which the template is a member..."
§ 7.3.1.2/2 : "Members of a named namespace can also be defined outside
that namespace by explicit qualification (3.4.3.2) of the name
being defined, provided that the entity being defined was already
declared in the namespace and the definition appears after the
point of declaration in a namespace that encloses the
declaration's namespace."
ne s'applique donc pas dans le cas d'une spécialisation explicite,
il faut écrire
Cyril Poupon wrote:Le message d'erreur semble clair. J'imagine donc qu'il s'agit d'une de ces
obscures subtilités du langage C++ qui sont peu à peu implementées dans les
compilateurs.
Quelqu'un connait-il le paragraphe correspondant de la norme ?
§ 14.7.3/2 : "An explicit specialization shall be declared in the namespace
of which the template is a member..."
§ 7.3.1.2/2 : "Members of a named namespace can also be defined outside
that namespace by explicit qualification (3.4.3.2) of the name
being defined, provided that the entity being defined was already
declared in the namespace and the definition appears after the
point of declaration in a namespace that encloses the
declaration's namespace."
ne s'applique donc pas dans le cas d'une spécialisation explicite,
il faut écrire
Au passage, dommage que GCC ne prenne pas le problème de la
compatibilité plus au sérieux. Ce changement casse une fois de plus
beaucoup de code existant, il aurait fallu ajouter une option pour
éliminer cette erreur.
Au passage, dommage que GCC ne prenne pas le problème de la
compatibilité plus au sérieux. Ce changement casse une fois de plus
beaucoup de code existant, il aurait fallu ajouter une option pour
éliminer cette erreur.
Au passage, dommage que GCC ne prenne pas le problème de la
compatibilité plus au sérieux. Ce changement casse une fois de plus
beaucoup de code existant, il aurait fallu ajouter une option pour
éliminer cette erreur.
Au passage, dommage que GCC ne prenne pas le problème de la compatibilité
plus au sérieux. Ce changement casse une fois de plus beaucoup de code
existant, il aurait fallu ajouter une option pour éliminer cette erreur.
Au passage, dommage que GCC ne prenne pas le problème de la compatibilité
plus au sérieux. Ce changement casse une fois de plus beaucoup de code
existant, il aurait fallu ajouter une option pour éliminer cette erreur.
Au passage, dommage que GCC ne prenne pas le problème de la compatibilité
plus au sérieux. Ce changement casse une fois de plus beaucoup de code
existant, il aurait fallu ajouter une option pour éliminer cette erreur.
Falk Tannhäuser writes:§ 14.7.3/2 : "An explicit specialization shall be declared in the nam espace
of which the template is a member..."
§ 7.3.1.2/2 : "Members of a named namespace can also be defined outsi de
that namespace by explicit qualification (3.4.3.2) of the name
being defined, provided that the entity being defined was already
declared in the namespace and the definition appears after the
point of declaration in a namespace that encloses the
declaration's namespace."
ne s'applique donc pas dans le cas d'une spécialisation explicite,
Je ne comprends pas le "donc" (avec ce que tu as cite, j'ai pas ete
voir le texte complet).
Falk Tannhäuser <falk.tannhauser@crf.canon.fr> writes:
§ 14.7.3/2 : "An explicit specialization shall be declared in the nam espace
of which the template is a member..."
§ 7.3.1.2/2 : "Members of a named namespace can also be defined outsi de
that namespace by explicit qualification (3.4.3.2) of the name
being defined, provided that the entity being defined was already
declared in the namespace and the definition appears after the
point of declaration in a namespace that encloses the
declaration's namespace."
ne s'applique donc pas dans le cas d'une spécialisation explicite,
Je ne comprends pas le "donc" (avec ce que tu as cite, j'ai pas ete
voir le texte complet).
Falk Tannhäuser writes:§ 14.7.3/2 : "An explicit specialization shall be declared in the nam espace
of which the template is a member..."
§ 7.3.1.2/2 : "Members of a named namespace can also be defined outsi de
that namespace by explicit qualification (3.4.3.2) of the name
being defined, provided that the entity being defined was already
declared in the namespace and the definition appears after the
point of declaration in a namespace that encloses the
declaration's namespace."
ne s'applique donc pas dans le cas d'une spécialisation explicite,
Je ne comprends pas le "donc" (avec ce que tu as cite, j'ai pas ete
voir le texte complet).
Or, la spécialisation d'un template n'est pas la définition d'un
membre déclaré dans un namespace, c'est pour ça que je disais que §
7.3.1.2/2 ne s'y applique pas.
Or, la spécialisation d'un template n'est pas la définition d'un
membre déclaré dans un namespace, c'est pour ça que je disais que §
7.3.1.2/2 ne s'y applique pas.
Or, la spécialisation d'un template n'est pas la définition d'un
membre déclaré dans un namespace, c'est pour ça que je disais que §
7.3.1.2/2 ne s'y applique pas.
Je te suggere de lire 14.7.3/2 jusqu'au bout.
Je te suggere de lire 14.7.3/2 jusqu'au bout.
Je te suggere de lire 14.7.3/2 jusqu'au bout.