2010-06-13 8 views
3

Je suis en train de faire quelque chose le long des lignes de this answer et lutte:erreur: typedef nom ne peut pas être imbriqué-name-spécificateur

$ gcc --version
gcc (GCC) 4.2.4 (Ubuntu 4.2.4-1ubuntu4)

file.cpp:7: error: template argument 1 is invalid 
file.cpp:7: error: typedef name may not be a nested-name-specifier 

Et la partie incriminée du fichier :

template <class R, class C, class T0=void, class T1=void, class T2=void> 
struct MemberWrap; 

template <class R, class C, class T0> 
struct MemberWrap<R, C, T0>{ 
    typedef R (C::*member_t)(T0); 
    typedef typename boost::add_reference<typename T0>::type> TC0; // <---- offending line 

    MemberWrap(member_t f) 
     : m_wrapped(f){ 
    } 

    R operator()(C* p, TC0 p0){ 
     GILRelease guard; 
     return (p->*(this->m_wrapped))(p0); 
    } 

    member_t m_wrapped; 
}; 

Répondre

5

Goutte typename de typename T0 dans

typedef typename boost::add_reference<typename T0>::type> TC0; 

et probablement laisser tomber la deuxième équerre. C'est à dire.

typedef typename boost::add_reference<T0>::type TC0; 
+0

Merci, je ne peux pas croire que j'ai raté ça! – James

Questions connexes