Ошибка частичной специализации шаблона при компиляции GCC, но не MSVC - PullRequest
0 голосов
/ 05 ноября 2011

Следующий код прекрасно компилирует MSVC, но при сборке GCC выдает много ошибок:

#define FORCE_INLINE inline
#define CREF(A) const A&

template <class F>
class RDOFunCalcStd: public RDOFunCalc
{
...
template <class T>
FORCE_INLINE T getParam(CREF(LPRDORuntime) pRuntime, ruint paramNumber);

template <>
FORCE_INLINE double getParam<double>(CREF(LPRDORuntime) pRuntime, ruint paramNumber)
{
    return pRuntime->getFuncArgument(paramNumber).getDouble();
}

template <>
FORCE_INLINE int getParam<int>(CREF(LPRDORuntime) pRuntime, ruint paramNumber)
{
    return pRuntime->getFuncArgument(paramNumber).getInt();
}
...
};

Список ошибок:

ошибка: явная специализация в области без пространства имен ‘класс rdoRuntime :: RDOFunCalcStd’

ошибка: идентификатор шаблона "getParam" в объявлении основного шаблона

ошибка: явная специализация в области, не связанной с пространством имен R класс rdoRuntime :: RDOFunCalcStd ’

ошибка: идентификатор шаблона "getParam" в объявлении основного шаблона

ошибка: «int rdoRuntime :: RDOFunCalcStd :: getParam (const rdoRuntime :: LPRDORuntime &, ruint)» не может быть перегружен

ошибка: с помощью 'double rdoRuntime :: RDOFunCalcStd :: getParam (const rdoRuntime :: LPRDORuntime &, ruint)' '

Что нужно сделать, чтобы устранить ошибку?

1 Ответ

3 голосов
/ 05 ноября 2011

См.

Статья Херба Саттера

Объяснили почемуКороче говоря, C ++ не поддерживает специализацию шаблонов функций.

...