Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème sur l'argument d'une fonction template

3 réponses
Avatar
Helfer Thomas
Bonjour,

j'aimerai comprendre pourquoi le code suivant ne compile pas :

#include<iostream>
#include<cstdlib>

template<typename T>
struct Id
{
typedef T type;
};

template<typename T>
void f(typename Id<T>::type a)
{
using namespace std;
cout << a << endl;
}

int main(void)
{
f(12.);
f(12);
return EXIT_SUCCESS;
}

gcc me donne le message d'erreur suivant :
Test.cxx:26: error: no matching function for call to f(double)
Test.cxx:27: error: no matching function for call to f(int)

Est-ce normal ?

Cordialement,

Helfer Thomas

3 réponses

Avatar
Jean-Marc Bourguet
Helfer Thomas writes:

Bonjour,

j'aimerai comprendre pourquoi le code suivant ne compile pas :

#include<iostream>
#include<cstdlib>

template<typename T>
struct Id
{
typedef T type;
};

template<typename T>
void f(typename Id<T>::type a)
{
using namespace std;
cout << a << endl;
}

int main(void)
{
f(12.);
f(12);
return EXIT_SUCCESS;
}

gcc me donne le message d'erreur suivant :
Test.cxx:26: error: no matching function for call to f(double)
Test.cxx:27: error: no matching function for call to f(int)

Est-ce normal ?


Oui. Il n'est pas possible de deduire le parametre template en
suivant les regles du C++. Tu peux les specifier toi-meme:

f<double>(12.);
f<int>(12);

A+

--
Jean-Marc

Avatar
Gabriel Dos Reis
Helfer Thomas writes:

| Bonjour,
|
| j'aimerai comprendre pourquoi le code suivant ne compile pas :
|
| #include<iostream>
| #include<cstdlib>
|
| template<typename T>
| struct Id
| {
| typedef T type;
| };
|
| template<typename T>
| void f(typename Id<T>::type a)
^^^^

Salut Thomas. Laurent a posé une question similaire récemment : le
paramètre de template « T » apparait dans un contexte non-déductible.
Donc l'appel « ordinaire »

[...]

| f(12.);

ne peut pas marcher -- il te faudrait explicitement spécifier
l'argument de template « f<double>(12.) ».

-- Gaby
Avatar
Helfer Thomas
Merci pour vos réponses.

Le Tue, 07 Nov 2006 09:22:04 +0100, Helfer Thomas a écrit :

Bonjour,

j'aimerai comprendre pourquoi le code suivant ne compile pas :

#include<iostream>
#include<cstdlib>

template<typename T>
struct Id
{
typedef T type;
};

template<typename T>
void f(typename Id<T>::type a)
{
using namespace std;
cout << a << endl;
}

int main(void)
{
f(12.);
f(12);
return EXIT_SUCCESS;
}

gcc me donne le message d'erreur suivant :
Test.cxx:26: error: no matching function for call to f(double)
Test.cxx:27: error: no matching function for call to f(int)

Est-ce normal ?

Cordialement,

Helfer Thomas