Ошибка компиляции с шаблоном при сборке с GCC, но не с MSVC - PullRequest
2 голосов
/ 28 октября 2011

В выражении:

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

gcc показывает следующие ошибки:

ошибка: 'rdoRuntime :: RDOValue :: operator-' не может появляться в выражении-константе

ошибка: '&' не может появиться в константном выражении

ошибка: неверный аргумент шаблона 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 Ответ

1 голос
/ 28 августа 2012

Когда вы используете typedef, не используйте скобки:

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

Это работает для меня.

...