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