如何处理 boost 选项 header 文件中的 c++ 相关警告?

how to deal with a c++ related warning in boost option header file?

我有 Microsoft Visual Studio (MSVS) 2012 Pro,我已将警告级别设置为略高的级别 4。执行此操作时,我收到一些包含的 header 文件的警告来自升压库。消息是这样的:

C:\Users\****\boost/optional/optional.hpp(595): warning C4244: 'initializing' : conversion from 'T_DOUBLE' to 'float', possible loss of data
      C:\Users\****\boost/optional/optional.hpp(430) : see reference to function template instantiation 'void boost::optional_detail::optional_base<T>::construct<double>(Expr &&,const void *)' being compiled
      with
      [
          T=T_FLOAT,
          Expr=T_DOUBLE
      ]
      C:\Users\****\boost/optional/optional.hpp(430) : see reference to function template instantiation 'void boost::optional_detail::optional_base<T>::construct<double>(Expr &&,const void *)' being compiled
      with
      [
          T=T_FLOAT,
          Expr=T_DOUBLE
      ]

导致此警告的文件中的代码是这样的(boost 1.64.0.B2 的最新测试版的第 610 行仍然与它完全相似 - 但我现在不在测试版中):

#ifndef BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
// Constructs using any expression implicitly convertible to the single argument
// of a one-argument T constructor.
// Converting constructions of optional<T> from optional<U> uses this function with
// 'Expr' being of type 'U' and relying on a converting constructor of T from U.
template<class Expr>
void construct ( Expr&& expr, void const* )
{
  new (m_storage.address()) value_type(boost::forward<Expr>(expr)) ;
  m_initialized = true ;
}

这个警告的原因是什么(=学会理解)以及如何在提升 header 中为我消除它,还有其他人吗?或者思考:以这种全局方式 "fix" 它是否有意义,或者是否有更深层次的意义指向其他地方(提升或应用程序代码)以改进或修复那些其他代码?

您可能将 double 文字传递给需要 float 的方法。像 foo(1.0) 而不是 foo(1.0f)