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,

Here is a simple program to reprdouce this:

#include <boost/foreach.hpp>
#include <iostream>
#include <ostream>
#include <vector>

typedef std::vector<
> int_vector;

int_vector const
        int_vector ret(2, 2);

        return ret;

                int_vector::const_reference ref,
                std::cout << ref << '\n';

This prints the following warning:

test.cpp:21:2: warning: choosing
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

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, gregod at, cpdaniel at, john at