Hi Scott, Scott Meyers wrote:
I'm trying to use the MPL for the first time, and I have two questions. First, I want to use BOOST_MPL_ASSERT to say that at least one of two conditions is true. For the time being, one of the conditions is always false, so this is what I've tried:
BOOST_MPL_ASSERT(( false || boost::is_same
)); It won't compile, so I tried this:
BOOST_MPL_ASSERT(( mpl::or_(false, boost::is_same
) )); It won't compile either. I'm guessing that I have to use mpl::false_ or something in place of false, but that doesn't work either. Can somebody please tell me the proper way to say what I want to say?
Since we're in the "type system world", there are no (unwrapped)
constants - there are types and only types. So, there are no function
calls, round parentheses and no operators - we have to use class
templates, /metafunctions/, for the operations, because their
specializations are types and they can hold a nested 'type' member for
the result -- even templates and constants (but for returning lesser
beings like that we use a 'type' member pointing back to the nesting
class to have a proper metafunction).
#include
My second question is about the existence of an MPL algorithm akin to the STL algorithm includes. Given two MPL vectors V1 and V2, I want to know if all the types in V1 are also in V2. I know about mpl::contains, but I can't find mpl::includes. Is there one, or do I need to write it myself?
I'd probably do it like this:
#include
I have the MPL book, so references to that are fine, in addition to anything online.
Still missing in my collection, unfortunately. Still waiting for the discount price together with "Effective MPL" ;-)... Regards, Tobias