Podczas kompilacji (Microsoft Visual C++ 2005 Express) to fragment kodu:Nie można przekonwertować z typu x na typ x?
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>();
}
pojawia się błąd C2440:
'=': cannot convert from 'A (__cdecl *)(void)' to 'A (__cdecl *)(void)'
To nie ma dla mnie sensu. Dwa typy nazwane w tekście błędu są oczywiście takie same. Ponadto, po zmianie wartości zwracanej Foo
na int
, nie ma takiego błędu.
Czy to błąd, czy robię coś nie tak?
EDIT: Więc, jeśli to błąd, czy ktoś wie, jak rozwiązać ten problem? Może za pomocą rzutów? Potrzebuję tego kodu do kompilacji ...
To jest błąd! [....] –
Początkowo myślałem, że to dlatego, że 'A (*) (void)' * jest inne * od 'A (A :: *) (void)', ale nie mógł tego zrobić w ten sposób. – Griwes