Boost logo

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