При компиляции (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
такой ошибки не возникает.
Это ошибка или я что-то делаю не так?
РЕДАКТИРОВАТЬ: Итак, если это ошибка, кто-нибудь знает, как ее решить? Может быть, с помощью приведения? Мне нужен этот код для компиляции ...