Ma structure de fichier est ainsi:
file.h (définitions des en-têtes de mes classes et de mes fonctions templates ou non)
file.cpp (implémentations des non-templates)
file.tpp (définition de l'implémentation des templates)
file.ut (tests unitaires avec boost unit)

La librairie se construit ainsi
file.cpp inclus file.h qui inclus en fin de fichier file.tpp

Mon application de test est un gros main qui inclus mes tests unitaires.

file.h:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
#ifndef XX_FILE_H
#define XX_FILE_H
 
namespace XX
{
	template< typename T >
	class TotoFile : public boost::noncopyable
	{
		public:
			typename XX::Toto< T >::Example m_Example;
 
			const std::string m_Id;
 
			TotoFile(const std::string &inId);
			virtual ~TotoFile();
 
			virtual std::string GetId() = 0;
	}
}
 
#include "XX/file.tpp"
 
#endif // XX_FILE_H
file.tpp:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
template< typename T >
XX::TotoFile< T >::TotoFile(const std::string &inId):
    m_Id(inId)
{}
 
template< typename T >
XX::TotoFile::TotoFile< T >::~TotoFile()
{}
J'utilise bien le cxx flag: -g -O0 pour compiler ma libraire et mon application de test.

GDB n'arrive pas à accéder au code des template:
In ?? () ()
Cannot find bounds of current function
Alors tout les exemples qui fonctionnent avec GDB c'est quand les templates sont écrit dans les cpp. Ce qui est, pour rester poli, impossible dans mon cas.
Et le cas où les gens ont pas de réponse c'est mon cas, le template est inclus en fin de fichier dans le header. Donc je tente ma chance avec vous :p.

Voici ma configuration (Mingw Nuwen):
Essentials:
* binutils 2.28
* GCC 7.1.0
* mingw-w64 5.0.2

Utilities:
* coreutils 8.27 (only sort, uniq, and wc)
* gdb 8.0
* grep 2.10
* LAME 3.99.5
* make 4.2.1
* pngcheck 2.3.0
* pngcrush 1.8.11
* sed 4.4
* vorbis-tools 1.4.0