Можно ли считать, что два указателя функций, указывающие на разные экземпляры одной шаблонизированной функции, будут сравниваться неравнозначно? Даже если шаблонизированная функция вообще не использует параметр(ы) шаблона и, таким образом, делает точно то же самое в каждом случае?
Например, следующее прекрасно работает на моем компиляторе, но я не уверен, работает ли оно на любом другом:
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
}