I have code that will compile using msvc 7.1 but will not under intel 9.0.
Here is some simplified code to illustrate my problem:
using namespace boost;
using namespace std;
typedef array array_type;
array_type a;
a[0] = 0; a[1] = 1;
vector v;
v.push_back(a);
vector<int> h;
for_each(v.begin(), v.end(), mem_fun_ref(&array_type::front));
This compiles and runs using msvc 7.1, but intel 9.0 errors with the following:
error: more than one instance of overloaded function "mem_fun_ref"
matches the argument list:
function template "std::mem_fun_ref(_Result (_Ty::*)() const)"
function template "std::mem_fun_ref(_Result (_Ty::*)())"
argument types are: (<unknown-type>)
Here are the two definitions of front for boost::array:
reference front()
{
return elems[0];
}
const_reference front() const
{
return elems[0];
}
If I'm reading the error correctly, this means that the intel compiler
doesn't know if
I want to use the const or non-const version of front.
Does anyone know anything about this? Is this the forwarding problem?
Is a function wrapper around front a good solution? What are the solutions?
Thanks,
Chris