Opened 12 years ago
Closed 12 years ago
#4926 closed Bugs (fixed)
MSM deferred events doesn`t works when compile using msvc 8.0
Reported by: | anonymous | Owned by: | Christophe Henry |
---|---|---|---|
Milestone: | To Be Determined | Component: | msm |
Version: | Boost 1.45.0 | Severity: | Problem |
Keywords: | msm msvc 8 | Cc: |
Description
Porting my state machine from Boost.Statechart to MSM I have came across with strange problem, events deferring feature that worked well with msvc 10.0 in test programs, doesn`t want to work in real application compiled with msvc 8.0. After digging in msm sources I found the place and found how to fix it. In msm/back/state_machine.hpp there is template handle_defer_helper which, as I found, always use empty implementation. I have check has_fsm_deferred_events metafunctor and it return true, but vc 8.0 compiler continues to use empty implementation.
I replaced enable_ifs return type from void to int and it helped. Seems void type is some kind of "priviledged type" for msvc, I don
t know how to explain it.
Patch attached to bug
Attachments (1)
Change History (3)
by , 12 years ago
Attachment: | 01-msm-defer-events-bug.patch added |
---|
comment:1 by , 12 years ago
comment:2 by , 12 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
Fascinating! VC8 is really full of surprises. I don't think void is a special type. Indeed, inside handle_defer_helper I use deferred_msg_queue_helper, which uses the exact same construct. And it works otherwise the problem would still be there. Looks like another random VC8 bug.
Whatever, if this makes it work, I'm happy to apply the patch for the 1.46. As I don't have this compiler any more, I'll trust you that it works with VC8. Fixed inside trunk revision 67253. Thanks a lot for your valuable report and the patch!
Christophe