|
Boost : |
Subject: [boost] [foreach] Warning with gcc-4.6.0 and -Wconversion
From: Philipp Reh (sefi_at_[hidden])
Date: 2011-05-04 10:29:44
gcc-4.6.0 made Boost.foreach unusable in 1.46.1 because the rvalue detection
no longer works. Now, there is a fix in trunk for it but it has a nasty side
effect, namely a warning that is emitted whenever foreach is used with an
rvalue and -Wconversion is turned on. Sadly, this warning cannot be ignored
by including Boost with -isystem because the code is generated by a macro,
obviously.
Here is a simple program to reprdouce this:
#include <boost/foreach.hpp>
#include <iostream>
#include <ostream>
#include <vector>
typedef std::vector<
int
> int_vector;
int_vector const
test()
{
int_vector ret(2, 2);
return ret;
}
int
main()
{
BOOST_FOREACH(
int_vector::const_reference ref,
test()
)
std::cout << ref << '\n';
}
This prints the following warning:
test.cpp:21:2: warning: choosing
âboost::foreach_detail_::rvalue_probe<T>::operator
boost::foreach_detail_::rvalue_probe<T>::value_type() [with T = const
std::vector<int>, boost::foreach_detail_::rvalue_probe<T>::value_type =
const std::vector<int>]â over
âboost::foreach_detail_::rvalue_probe<T>::operator T&() const [with T =
const std::vector<int>]â [-Wconversion]
test.cpp:21:2: warning: for conversion from
âboost::foreach_detail_::rvalue_probe<const std::vector<int> >â to âconst
int_vectorâ [-Wconversion]
test.cpp:21:2: note: because conversion sequence for the argument is
better
I would be glad if this could be fixed somehow because -Wconversion is a
crucial warning option to me.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk