2017-04-19 5 views
0

私はMicrosoft Visual Studio(MSVS)2012 Proを持っています。私はこれを行う際に警告レベルを少し上げたレベル4に設定しました。私は、ブーストライブラリからインクルードされたヘッダファイルの警告を受け取りました。メッセージはこれです:ブーストオプションのヘッダーファイルでC++関連の警告を処理する方法は?

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 
     ] 

は、この警告につながるファイル内のコードはブースト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 ; 
} 

何である理由(=この警告のために)理解することを学ぶとどのように任意の他人私のためにブーストヘッダーでそれを排除するために?別の考え方:それをグローバルな方法で「修正」することは理にかなっているのですか、他のコードを改善したり修正したりするために、他の場所(ブーストコードまたはアプリケーションコード)を指し示すより深い意味がありますか?

+0

これらの警告の原因となったコードを表示することはできますか?すなわち、 'construct'関数を呼び出すようになりました。理想的には[最小限の、完全で実証可能な例](https://stackoverflow.com/help/mcve)。あなたはもっと正確な答えを得るでしょう。 –

+0

私のコード内のダングリングアイテムが(例えば)であった; 'fValue = row.get ( "キーワード")' 私はそれを変更: 'fValue = row.get ( "キーワード")。 ' 真の起源と報告された警告の場所は、互いにかなり離れています。 –

答えて

1

floatが必要なメソッドには、おそらくdoubleリテラルが渡されています。何かfoo(1.0)の代わりにfoo(1.0f)

関連する問題