C++ Visual Studio 2013-std::在出现警告时启用_4544

C++ Visual Studio 2013-std::在出现警告时启用_4544,c++,visual-studio,c++11,C++,Visual Studio,C++11,我已经写了这个代码 在类中的标题 template <typename T, typename = typename std::enable_if<std::is_arithmetic<T>::value, T>::type> T GetResultValueAsNumber(char * result); 模板 T GetResultValueAsNumber(字符*结果); 而不是内联文件 template < typename

我已经写了这个代码

在类中的标题

template <typename T,
typename = typename std::enable_if<std::is_arithmetic<T>::value, T>::type>
T GetResultValueAsNumber(char * result);
模板
T GetResultValueAsNumber(字符*结果);
而不是内联文件

 template <
        typename T,
        typename = typename std::enable_if<std::is_arithmetic<T>::value, T>::type
    >
    T PostgreSQLWrapper::GetResultValueAsNumber(char * result)
    {    
        double value = strtod(result, NULL);

        return static_cast<T>(value);
    };
模板<
类型名T,
typename=typename std::enable_if::type
>
T PostgreSQLWrapper::GetResultValueAsNumber(char*result)
{    
双精度值=strtod(结果,NULL);
返回静态_cast(值);
};
在Visual Studio 2013中,我收到了此警告(但代码工作正常)

警告C4544:'':此模板声明上的默认模板参数被忽略-请参阅“”的声明

这是什么意思?

默认值只能给出一次,因此,如果它在标题中,则不能用函数的定义来重述它。只需删除(或注释掉)默认值。

VC++在这里不符合要求;这个程序格式不好。GCC和叮当声

§14.1/10:

获得可供使用的默认模板参数集 通过合并 模板默认函数参数与(8.3.6)相同

§8.3.6/4:

默认参数不能由以后的声明重新定义(不是 即使是相同的值

/6还显示了一个示例:

除了类模板的成员函数外,默认参数 在类外部出现的成员函数定义中 将定义添加到 类定义中的成员函数声明;[…][示例:

-[结束示例]


请你把样品寄出去好吗。我完全不明白你的意思。
warning C4544: '<unnamed-symbol>' : default template argument ignored on this template declaration - see declaration of '<unnamed-symbol>'
class C {
    void f(int i = 3);
};

void C::f(int i = 3) {   // error: default argument already
}                        // specified in class scope

// […]