次のコードを検討してください。
#include <iostream>
#include <vector>
#include <boost/numeric/ublas/vector.hpp>
#include <boost/numeric/ublas/io.hpp>
int main()
{
namespace ublas = boost::numeric::ublas;
double d = M_PI;
unsigned u = d;
std::cout << "d = " << d << std::endl;
std::cout << "u = " << u << std::endl;
ublas::bounded_vector<double,3> dVec = ublas::scalar_vector<double>(3,M_PI);
ublas::bounded_vector<unsigned,3> uVec = dVec; // type conversion!
std::cout << "dVec = " << dVec << std::endl;
std::cout << "uVec = " << uVec << std::endl;
return 0;
}
次のオプションを指定してg++(バージョン4.6.1)を使用してこれをコンパイルすると、次のようになります。
g++ -g3 -Wall -Wextra -ansi -pedantic -Wconversion -std=c++0x test.cpp -o test
次の警告が表示されます。
test.cpp: In function ‘int main()’:
test.cpp:11:22: warning: conversion to ‘unsigned int’ from ‘double’ may alter its value [-Wconversion]
プログラムを実行すると、次のようになります。
$ ./test
d = 3.14159
u = 3
dVec = [3](3.14159,3.14159,3.14159)
uVec = [3](3,3,3)
コンパイラーはスカラーの変換に関する警告を生成しましたが、ublas変換に関する警告はありませんでした。その場合、コンパイラーに警告を書き込む方法はありますか?のように見える-Wconversion
か、他のオプションのいずれかがこれを行いません。