29 votes

Type local comme arguments de modèle en C ++

C'est mon code

 #include <vector>
template <typename T, template<typename> class C = std::vector >
struct FooBar
{
   /*codez*/
};
template<typename T>
struct Global{};

int main()
{
   struct Local{};  
   FooBar<Local,Global> k;
}
 

C'est l'erreur que j'obtiens

template argument for ‘template<class T, template<class> class C> struct FooBar' uses local type ‘main()::Local'

Quelle partie de la norme dit que c'est faux? J'utilise gcc 4.5.1. Comment faire fonctionner ce code?

24voto

James McNellis Points 193607

Quelle partie de la norme dit que c'est mal?

Que serait §14.3.1/2 à partir de 2003 de la Norme C++:

Un local type, un type avec pas de lien, un sans nom, type ou d'un type de composé de l'une quelconque de ces types ne doivent pas être utilisés comme un modèle d'argument pour un modèle de type de paramètre.


Comment rendre ce code fonctionne?

Ne pas utiliser un type local comme un argument de modèle.

Notez que cette restriction a été levée dans C++0x, donc finalement, vous serez en mesure d'utiliser un type local comme un argument de modèle (je ne sais pas si les compilateurs encore cela).

8voto

Prasoon Saurav Points 47488

14.3.1 / 2

Un type local, un type sans liaison, un type sans nom ou un type composé de l'un de ces types ne doit pas être utilisé comme argument de modèle pour un paramètre de type de modèle.

Essayez de compiler votre code avec l'option -std=c++0x (gcc 4.5.1). C ++ 0x lève la restriction et vous pouvez donc utiliser un type local comme argument de modèle.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X