Не удается преобразовать тип x в тип x?

При компиляции (Microsoft Visual C ++ 2005 Express) этот фрагмент кода:

struct A
{
    template< typename T > static A Foo( void ) { return A(); }
    struct S
    {
        template< typename T > static S GetInstance( void )
        {
            S Result;
            Result.m_funcFoo = &A::Foo< T >;
            return Result;
        }
        A ( *m_funcFoo )( void );
    };
};

int main(int argc, char* argv[])
{
    A::S::GetInstance< int >();
}

Я получаю ошибку C2440:

'=': невозможно преобразовать из 'A (__cdecl * ) (void) 'to' A (__cdecl *) (void) '

Для меня это не имеет смысла. Два типа, названные в тексте ошибки, очевидно, одинаковы. Кроме того, при изменении возвращаемого значения Foo на int такой ошибки не возникает.

Это ошибка или я что-то делаю не так?

РЕДАКТИРОВАТЬ: Итак, если это ошибка, кто-нибудь знает, как ее решить? Может быть, с помощью приведения? Мне нужен этот код для компиляции ...

11
задан Baltram 23 December 2011 в 17:32
поделиться