使用GCC而不是MSVC构建时,使用模板编译错误

时间:2011-10-28 08:10:38

标签: c++ templates visual-c++ gcc syntax-error

表达式:

typedef RDOCalcUnary<RDOValue, (&RDOValue::operator-), OperatorType::OT_ARITHM> RDOCalcUMinus;

gcc显示以下错误:

  

错误:'rdoRuntime :: RDOValue :: operator-'不能出现在   常数表达式

     

错误:'&amp;'不能出现在常量表达式

中      

错误:模板参数2无效

     

错误:';'标记

之前的声明中的无效类型

在Windows下,MSVC编译器无错误地编译代码。

有什么问题?我该如何解决这个问题?

template <typename ret_type, ret_type (RDOValue::*pOperator)() const, typename OperatorType::Type CalcType>
class RDOCalcUnary: public RDOCalcUnaryBase
{
friend class rdo::Factory<RDOCalcUnary<ret_type, pOperator, CalcType> >;
public:
    enum { calc_type = CalcType };
    typedef ret_type (RDOValue::*value_operator)() const;

    static RDOSrcInfo     getStaticSrcInfo(CREF(RDOSrcInfo::Position) position, CREF(LPRDOCalc) pUnaryCalc);
    static value_operator getOperation    ();

protected:
    RDOCalcUnary(CREF(RDOSrcInfo::Position) position, CREF(LPRDOCalc) pOperation);

private:
    REF(RDOValue) doCalc(CREF(LPRDORuntime) pRuntime);
};

1 个答案:

答案 0 :(得分:1)

当你使用typedef时不要使用括号:

typedef RDOCalcUnary<RDOValue, &RDOValue::operator-, OperatorType::OT_ARITHM> RDOCalcUMinus;

对我有用。