Указатели на разные экземпляры одной шаблонизированной функции гарантированно сравниваются неравнозначно?

Можно ли считать, что два указателя функций, указывающие на разные экземпляры одной шаблонизированной функции, будут сравниваться неравнозначно? Даже если шаблонизированная функция вообще не использует параметр(ы) шаблона и, таким образом, делает точно то же самое в каждом случае?

Например, следующее прекрасно работает на моем компиляторе, но я не уверен, работает ли оно на любом другом:

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
}
12
задан thiton 29 December 2011 в 11:56
поделиться