Perchè il seguente programma produce un errore di compilazione?

Precisamente questo errore (IDE Visual Studio):
1>Main.obj : error LNK2019: riferimento al simbolo esterno "public: void __thiscall Prova:rint<char>(char)const " (??$print@D@Prova@@QBEXD@Z) non risolto nella funzione _main
1>c:\users\marco\documents\visual studio 2010\Projects\Prova\Debug\Prova.exe : fatal error LNK1120: 1 esterni non risolti


codice:
// Main.cpp

#include "Prova.h"

int main()
{
	Prova prova;
	prova.print( 'a' );


	return 0;
}



// Prova.h

#ifndef PROVA_H
#define PROVA_H


class Prova
{

public:

	template <typename T>
	void print( const T ) const;
};


#endif




// Prova.cpp

#include <iostream>
using std::cout;
using std::endl;


#include "Prova.h"


template <typename T>
void Prova::print( const T c ) const
{
	cout << c << endl;
}




L'unico modo per farlo funzionare sembra essere questo (senza utilizzare Prova.ccp), Prova.h si modifica in:

codice:
#ifndef PROVA_H
#define PROVA_H


#include <iostream>
using std::cout;
using std::endl;



class Prova
{

public:

	template <typename T>
	void print( const T ) const;
};


template <typename T>
void Prova::print( const T c ) const
{
	cout << c << endl;
}


#endif


Potete spiegarmi le motivazioni di questo comportamento in dettaglio, e/o come risolvere il problema?

Grazie.