Quando si compila (Microsoft Visual C++ 2005 Express) questo pezzo di codice:Impossibile convertire da tipo x a tipo 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>();
}
ottengo un errore di C2440:
'=': cannot convert from 'A (__cdecl *)(void)' to 'A (__cdecl *)(void)'
che non ha senso per me. I due tipi nominati nel testo dell'errore sono ovviamente uguali. Inoltre, quando si modifica il valore di ritorno di Foo
su int
, non si verifica tale errore.
È un errore o sto facendo qualcosa di sbagliato?
MODIFICA: Quindi, se si tratta di un bug, qualcuno sa come risolvere questo? Forse usando i calchi? Ho bisogno di questo codice per compilare ...
È un bug! [....] –
Inizialmente, ho pensato che è perché 'A (*) (void)' * è diverso * da 'A (A :: *) (void)', ma non potrei farlo in quel modo – Griwes