Boost logo

Boost Users :

From: Alain Cormier (alain.work_at_[hidden])
Date: 2006-05-31 10:16:43

Hi group!

I try to call in a for_each a member function that take a parameter by value
AND const. I know we do not need to do things like that, but I am using code
from an other team and I don't want to change it if I don't need. It results
with this error :
D:\ENG-AC\working\tests\test_ParamConst_vs_boostBind\test\test.cpp(35) :
error C2665: 'bind' : none of the 2 overloads can convert parameter 1 from
type 'int (__thiscall test_class::*)(const int) const'

Here a little program that reproduce de behavior :

#include <algorithm>
#include <vector>
#include "boost/bind.hpp"

class test_class
    test_class(int value) : m_value(value){}

    int fct_param_const(const int value) const {return m_value + value;}
    int fct_param_ref_const(const int& value) const {return m_value +
    int fct_param(int value) const {return m_value + value;}

    int m_value;

int main(int argc, char* argv[])
    std::vector<int> all_values(5);
    std::generate(all_values.begin(), all_values.end(), &rand);

    test_class doTest(28);

    std::for_each(all_values.begin(), all_values.end(),
boost::bind(&test_class::fct_param, doTest, _1));
    std::for_each(all_values.begin(), all_values.end(),
boost::bind(&test_class::fct_param_ref_const, doTest, _1));

    // DOESN'T WORK : because of the parameter by value and const???
    //std::for_each(all_values.begin(), all_values.end(),
boost::bind(&test_class::fct_param_const, doTest, _1));

    return 0;

Is this a correct behavior from boost::bind? Does the only solution is to
remove the const from our function? We have so much difficulty to stay
const-correct, I do not want to send a signal to our team that const isn't
good (but maybe too much const isn't good :D). Anyway, what do you suggest?

By the way. I am using VC6 (SP5) under Win2000 and boost 1.33.1.


Alain Cormier

Boost-users list run by williamkempf at, kalb at, bjorn.karlsson at, gregod at, wekempf at