2010-06-13 25 views
3

我想一起做的this answer線的東西,和掙扎:錯誤:typedef名可能不是一個嵌套的名稱說明符

$ 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 

和文件的問題的一部分:

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; 
}; 

回答

5

typenametypename T0

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

並可能丟棄第二個角支架。即

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

謝謝,不敢相信我錯過了! – James 2010-06-13 07:41:50

相關問題