A priori ce que je vais demander fonctionne avec g++, mais je me demande si c'est bien légal, puisque je ne l'ai vu expliqué nul part.

Soit un model de classe C<T> possédant des fonctions membres, est il possible de spécialiser, certaines de ses fonctions membres, seulement dans leur définition?

Un petit exemple descriptif:
Code C.h : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
template <typename T>
class C
{
   void test();
}
 
#include "C.tpp"

Code C.tpp : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
template<typename T>
void C<T>::test()
{
   ...
}
template<>
void C<double>::test()
{
   ...
}
template<>
void C<float>::test()
{
   ...
}

Ainsi avec une utilisation:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
C<double> t;
//t::test(); edité
t.test();
ce sera la spécialisation C<double>::test qui sera utilisée.

Ce que j'ai compris dans ce genre de cas, c'est qu'il faut déclarer entièrement les models C<double> et C<float>. Est-ce vraiment ce que dit la norme?