In boost 1.53 the message_queue_t has this member function:
size_type get_num_msg();
This returns the number of messages currently stored. Never throws. I don't see any reason why this can't be const.
It turned out that this is a bug, and it has been fixed in boost revision #83470.