Boost logo

Boost :

From: Slawomir Lisznianski (slisznia_at_[hidden])
Date: 2006-12-27 23:34:02

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.


Slawomir Lisznianski
Paramay Group, LLC
"Programs for Research Machinery"

Boost list run by bdawes at, gregod at, cpdaniel at, john at