Bonjour,

je cherche à utiliser un argument template par défaut à l'intérieur d'une classe non-template et je n'y arrive pas.
Concrètement, je crée une première classe template acceptant un argument template par défaut :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
#ifndef DEFAULT_HPP
#define DEFAULT_HPP
 
struct empty{};
 
 
template< class T = empty >
class Default
{
 
};
 
#endif
Dans une autre classe non-template, je tente de déclarer une donnée membre de type Default en exploitant l'argument template par défaut empty:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
#ifndef OTHER_HPP
#define OTHER_HPP
 
#include "default.hpp"
 
class Other
{
private:
  Default m_foo; // ce que je pense être équivalent à Default<empty> m_foo;
};
 
#endif
Pour une question de reproductibilité, je vous fournis un fichier principal sommaire:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
#include "other.hpp"
 
 
int main()
{
  Other bar;
  return 0;
}
Quand je compile avec g++, j'obtiens le message d'erreur suivant :
In file included from main.cpp:4:0:
other.hpp:12:3: erreur: invalid use of template-name ‘Default’ without an argument list
Pourriez-vous m'expliquer le problème?

Merci!