2016-04-16 9 views
0

私はmpiでブーストを構築しましたが、x64プラットフォームでブーストmpiを使用して多くの警告を受けました。 Boost 1.59.0 + vs2015を使用しています。これらの警告を取り除くのを手伝ってください。ブーストmpi x64の警告 "size_t to int"

私のテストコードです。

#include <boost/mpi/environment.hpp> 
#include <boost/mpi/communicator.hpp> 
#include <iostream> 

namespace mpi = boost::mpi; 

int main(int argc, char* argv[]) { 
    mpi::environment env(argc, argv); 
    mpi::communicator world; 

    std::cout << "I am process " << world.rank() << " of " << world.size() 
     << "." << std::endl; 
    return 0; 
} 

と警告の一部のようになります。MSVC C4267警告があまりにも敏感である私見

1>d:\dependencies\boost_1_59_0\boost\mpi\detail\mpi_datatype_primitive.hpp(61) : warning C4267 : 'argument' : conversion from 'size_t' to 'int', possible loss of data 
1>d:\dependencies\boost_1_59_0\boost\mpi\detail\mpi_datatype_primitive.hpp(80) : warning C4267 : 'argument' : conversion from 'size_t' to 'int', possible loss of data 
1>d:\dependencies\boost_1_59_0\boost\mpi\detail\packed_iprimitive.hpp(62) : warning C4267 : 'argument' : conversion from 'size_t' to 'int', possible loss of data 
1>d:\dependencies\boost_1_59_0\boost\mpi\detail\packed_iprimitive.hpp(106) : warning C4267 : 'argument' : conversion from 'size_t' to 'int', possible loss of data 
1>d:\dependencies\boost_1_59_0\boost\mpi\detail\binary_buffer_iprimitive.hpp(64) : warning C4267 : 'argument' : conversion from 'size_t' to 'int', possible loss of data 
1>d:\dependencies\boost_1_59_0\boost\mpi\detail\packed_oprimitive.hpp(52) : warning C4267 : 'argument' : conversion from 'size_t' to 'int', possible loss of data 
1>d:\dependencies\boost_1_59_0\boost\mpi\detail\packed_oprimitive.hpp(96) : warning C4267 : “初始化” : conversion from 'size_t' to 'int', possible loss of data 
1>d:\dependencies\boost_1_59_0\boost\mpi\detail\packed_oprimitive.hpp(100) : warning C4267 : 'argument' : conversion from 'size_t' to 'int', possible loss of data 
1>d:\dependencies\boost_1_59_0\boost\mpi\detail\binary_buffer_oprimitive.hpp(53) : warning C4267 : 'argument' : conversion from 'size_t' to 'int', possible loss of data 
1>d:\dependencies\boost_1_59_0\boost\mpi\detail\binary_buffer_oprimitive.hpp(87) : warning C4267 : 'argument' : conversion from 'size_t' to 'int', possible loss of data 
1> d:\dependencies\boost_1_59_0\boost\archive\detail\oserializer.hpp(88) : note : see reference to function template instantiation'void boost::mpi::binary_buffer_oprimitive::save<char>(const std::basic_string<char, std::char_traits<char>, std::allocator<char>> &)' 
1> d:\dependencies\boost_1_59_0\boost\archive\detail\oserializer.hpp(232) : note : see reference to function template instantiation 'void boost::archive::save_access::save_primitive<Archive, T>(Archive &, const T &)' 
1>   with 
1>[ 
1>    Archive = boost::mpi::packed_oarchive, 
1>    T = std::string 
1>] 
+1

あなたの実装でsizeof(size_t)がsizeof(int)より小さいか等しいかどうかを確認するのは賢明なことです(これはOS固有です)。もしそうなら、この警告を無視することができます。 – sjsam

+0

私はそれがブーストのバグであると考えます。報告する前に、最新バージョンで修正されていないことを確認してください(私はチェックしましたが、そうではありません)。 – Zulan

+1

@sjsam、 'size_t'は符号なしなので、' sizeof(int)== sizeof(size_t) 'でもデータが失われます。ほとんどの64xマシンでは – Zulan

答えて

0

。 intをdoubleに変換するときにポップアップすることさえあります。しかし、この例では@sjsamがコメントしたように有効かもしれません。

私は変換が有効であることを確信していたとき、私は頻繁に使用してローカルに警告を無効にする:あなたの場合は

#ifdef _MSC_VER 
#pragma warning(pop) 
#endif 

を:コードの前に

#ifdef _MSC_VER 
#pragma warning(push) 
#pragma warning(disable : 4244) // implicit conversion, possible loss of data 
#endif 

を、そして再度有効にそれが使用して

#include <boost/mpi/environment.hpp> 
#include <boost/mpi/communicator.hpp> 
boost::mpi値は、その後の周りにそれらを置く std::numeric_limits<int>::max()を超えないと確信しています

ですので、boost::mpiのC4267警告のみを無効にすることができます。

+0

このバグが修正される前に、これが私の推測を回避する最良の方法です。ありがとう@ケンバ –

関連する問題