OVH Cloud OVH Cloud

Compilation de template spécialisé

4 réponses
Avatar
sej
Bonjour,
j'ai le code suivant :


/*main.cpp*/
#include "temp.h"
#include <iostream>
using namespace std;

int main(void)
{
Temp tmp;

typedef float type_data;
type_data in = 2.0f;
type_data r;
r = tmp.function(in);
cout << "r=" << r << endl;

return 0;
}


/*temp.h*/
#ifndef TEMP_H
#define TEMP_H

class Temp
{
public :

template<typename Type>
Type function(Type a);

};


template<typename Type>
Type Temp::function(Type a)
{
return a;
}

// specialized template function
template<>
float Temp::function(float a);


#endif // TEMP_H


/*temp.cpp*/
#include "temp.h"


template<>
float Temp::function(float a)
{
return a+1.0f;
}




Lorsque je le compile avec Visual C++ 7.1 j'ai une erreur interne du
compilateur. Par contre avec MingGCC3.4.2 ça passe.
Je ne comprends pas pourquoi ! J'ai soit fait une erreur dans mon code,
soit le compilateur de Microsoft gère mal les templates spécialisés ??

4 réponses

Avatar
Alain Gaillard


Lorsque je le compile avec Visual C++ 7.1 j'ai une erreur interne du
compilateur. Par contre avec MingGCC3.4.2 ça passe.
Je ne comprends pas pourquoi ! J'ai soit fait une erreur dans mon code,
soit le compilateur de Microsoft gère mal les templates spécialisés ??


Je dirais que le code est correct.
Ca devait être un pb dans Visual ++ 7.1

Dans le 2005 (alias VC++ 8), le code compile.

--
Alain

Avatar
Michel Decima


template<>
float Temp::function(float a)
{
return a+1.0f;
}

Lorsque je le compile avec Visual C++ 7.1 j'ai une erreur interne du
compilateur. Par contre avec MingGCC3.4.2 ça passe.
Je ne comprends pas pourquoi ! J'ai soit fait une erreur dans mon code,
soit le compilateur de Microsoft gère mal les templates spécialisés ??


la declaration de la fonction specialisee ne devrait pas etre plutot
celle ci:

template<>
float Temp::function<float>(float a);

je mets tout ca au conditionnel, parce que je ne me souviens pas de
la regle, et que mon g++4.1 accepte les deux...

Avatar
Sylvain Togni

[...]
Lorsque je le compile avec Visual C++ 7.1 j'ai une erreur interne du
compilateur. Par contre avec MingGCC3.4.2 ça passe.
Je ne comprends pas pourquoi ! J'ai soit fait une erreur dans mon code,
soit le compilateur de Microsoft gère mal les templates spécialisés ??


Une erreur interne est forcément un bug du compilo.

--
Sylvain Togni

Avatar
Alain Gaillard

Une erreur interne est forcément un bug du compilo.



Avec VC 2003 (le 7 autrement dit) il m'est arrivé d'avoir une erreur
interne sur du code incorrect. Tu diras que c'est quand même un bug du
compilo. Certes, mais cela justifie la question du posteur initial.

--
Alain