BOOST_IS_ABSTRACT( client_request_base )
This is used to indicate that client_request_base is an abstract function. Its only necessary for those compilers which can't implement is_abstract type trait correctly. In your case, it might be a problem because client_request_base is in fact NOT an abstract base class. In order to be one, it has to have at least one function of the from = 0. You could remedy this by specifing ~client_request_base() = 0;
BOOST_CLASS_EXPORT(calc_skip_images_request)
This is required to ensure that code for the derived classes is in fact instantiated even though its not otherwise to referred to in the program. It also assigns an external name which is used to communicate which of the derived class must be created when loading.
Im confused which of these two things is needed? When should I use export and when is abstract macro?
Robert Ramey