2017-05-30 69 views
0

我有這個類的定義(這裏簡化),它與VS2008編譯好。在VS2017,我得到一個語法錯誤C2059第一角度支架:模板化的類定義不能編譯VS2017

template < typename Function, typename Base, typename Specialiser = Base > 
class FunctionTermBase : public Base 
{ 
public: 
    // typedef typename Function::result_type result_type; 
    typedef typename Base term_type; 
    typedef typename Specialiser specialiser; 

protected: 
    FunctionTermBase() { } 

public: 
    template <typename T> 
    struct Specialise { 
     typedef typename specialiser::Specialise<T>::type type; 
    }; 
}; 

我會很感激,如果有人能告訴我什麼是錯的代碼?

+0

***我在第一個角度支架上出現語法錯誤C2059:***它可能有助於將精確錯誤消息的文本添加到您的問題。 – drescherjm

回答

3

您必須使用template關鍵字來指示以下依賴名稱也具有模板參數。此外,由於標識符已知爲類型(它們是模板參數),因此您的typedef中不需要typename

template < typename Function, typename Base, typename Specialiser = Base > 
class FunctionTermBase : public Base 
{ 
public: 
    // typedef typename Function::result_type result_type; 
    typedef Base term_type; 
    typedef Specialiser specialiser; 

protected: 
    FunctionTermBase() { } 

public: 
    template <typename T> 
    struct Specialise { 
     typedef typename specialiser::template Specialise<T>::type type; 
     //   Add template here ^^^^^^^^ 
    }; 
};