Можно ли предположить, что два указателя функций, указывающие на разные экземпляры одной шаблонной функции, будут сравнивать неравные? Даже если шаблонная функция вообще не использует параметр шаблона и, таким образом, делает то же самое в каждом случае?
Например, следующее работает отлично в моем компиляторе, но я не уверен, что он делает это на любом другом:
class TypeChecker
{
public:
template< typename T > static void foo( void )
{}
template< typename T > static void setType( void )
{ s_fooPtr = &foo< T >; }
template< typename T > static bool checkType( void )
{ return ( s_fooPtr == &foo< T > ); }
private:
static void ( * s_fooPtr )( void );
};
void ( * TypeChecker::s_fooPtr )( void ) = 0;
int main( void )
{
TypeChecker::setType< char >();
TypeChecker::checkType< char >(); // true
TypeChecker::checkType< unsigned char >(); // false
TypeChecker::checkType< signed char >(); // false
}