Boost logo

Boost Users :

From: Commander Pirx (CmdPirx_at_[hidden])
Date: 2008-03-27 15:23:38


Currently I don't understand why the following code dosn't compile (with VC
8.0). I simply try to bind the post_event() method from the state_machine to
a function object. To illustrate the problem I've added the following code
to the Camera.hpp file of the Camera example from the Statechart library:

#include <boost/function.hpp>
#include <boost/bind.hpp>

<snip>

struct Camera : sc::state_machine< Camera, NotShooting >
{

  // @test start
  typedef boost::function< void( const event_base_type& ) >process_event_fun; typedef boost::function< void( const event_base_type& ) > post_event_fun;
  process_event_fun process_event_fun_;
  post_event_fun post_event_fun_;
  Camera()
  {
    process_event_fun_ = boost::bind( &Camera::process_event, boost::ref(
*this ), _1 );
    // the following line doesn't compile with VC 8.0
    // post_event_fun_ = boost::bind( &Camera::post_event, boost::ref(
*this ), _1 );
  }
  // @test end

    bool IsMemoryAvailable() const { return true; }
    bool IsBatteryLow() const { return false; }

};

After uncommenting the marked line the compiler produce more than 200 error
messages: A function template has too few arguments. But the line above
compiles very well and the process_event() method has the same signature.
The post_event() method is polymorphic. But this shouldn't be a problem.
Should it?

 


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net