[Boost.Function] loosely enforced function signature

Given these two type declarations: typedef boost::function1<void, int &> signature; typedef void (*fp)(int &); and these two function definitions: void not_match(int v) { } // arg by value void match(int & v) { } // arg by ref The following seems to be true on my compiler (GCC 4.0.2): Case 1) signature fn = match; // compiles Case 2) signature fn = not_match; // compiles (problematic) Case 3) fp fn = match; // compiles Case 4) fp fn = not_match; // fails My question is, shouldn't Boost.Function library fail in case 2 with the error along the lines of case 4's: "error: invalid conversion from ‘void (*)(int)’ to ‘void (*)(int&)’"? I noticed this problem when users of my library register callbacks but occasionally mistype their function signature. They end up modifying function-local, rather than "out", variables. Cheers, -- Slawomir Lisznianski Paramay Group, LLC "Programs for Research Machinery"
participants (1)
-
Slawomir Lisznianski