Visual Studio 2013 - std::enable_if 警告 4544
Posted
技术标签:
【中文标题】Visual Studio 2013 - std::enable_if 警告 4544【英文标题】:Visual Studio 2013 - std::enable_if warning 4544 【发布时间】:2015-07-28 13:49:05 【问题描述】:我已经写了这段代码
在标题中的类中
template <typename T,
typename = typename std::enable_if<std::is_arithmetic<T>::value, T>::type>
T GetResultValueAsNumber(char * result);
比内联文件中
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);
;
在 Visual Studio 2013 中,我收到了这个警告(但代码可以正常工作)
warning C4544: '<unnamed-symbol>' : default template argument ignored on this template declaration - see declaration of '<unnamed-symbol>'
什么意思?
【问题讨论】:
【参考方案1】:VC++ 在这里不符合要求;该程序格式不正确。 GCC 和 Clang refuse to compile similar code。
§14.1/10:
获得了可供使用的默认模板参数的集合 通过合并所有先前声明的默认参数 模板默认函数参数的方式与 (8.3.6) 相同。
§8.3.6/4:
默认参数不应被以后的声明重新定义(不是 甚至到相同的值)。
/6 也显示了一个示例:
除了类模板的成员函数,默认参数 在出现在类之外的成员函数定义中 定义被添加到由 类定义中的成员函数声明; […] [例子:
class C void f(int i = 3); ; void C::f(int i = 3) // error: default argument already // specified in class scope // […]
— 结束示例 ]
【讨论】:
【参考方案2】:一个默认值只能给出一次,所以如果它在头文件中,它就不能用函数的定义重新声明。只需删除(或注释掉)默认值即可。
【讨论】:
能否请您发布样本。我完全不明白,你的意思。以上是关于Visual Studio 2013 - std::enable_if 警告 4544的主要内容,如果未能解决你的问题,请参考以下文章
Visual Studio 2013 - std::enable_if 警告 4544
在 MS Visual Studio 2013 中,我可以使用啥来代替 std::aligned_alloc?
Visual Studio 中的 std::packaged_task 错误?
没有 在MS Visual Studio 2013中 - 怎么做?