on Sun Jul 20 2008, "Robert Dailey"
Hi,
I'm trying to create my own struct that is compatible with boost::mpl::or_ as well as boost::enable_if.
I find that using boost::mpl::or_ requires that my structure have a 'type' member, and enable_if looks for 'value'.
Both metafunctions are defined so they will work with an MPL integral constant http://www.boost.org/doc/libs/1_35_0/libs/mpl/doc/refmanual/integral-constan...
Must I define both?
Usually the best way to do this is to derive your struct from mpl::true_ or mpl::false_ or some other bool-valued nullary MPL metafunction.
What is the proper way to handle this? Below is my structure:
template< typename t_type > struct is_sink { typedef typename boost::mpl::or_< vfx::io::is_device
, boost::is_same > type; ^ missing "::type" here? Otherwise, the "typename" above is probably illegal
};
provided of course that vfx::io::is_device
The above structure works perfectly fine with boost::mpl::or_, but does not work for boost::enable_if because it is looking for a 'value' member. I feel what it should be looking for is is_sink::type::value. An example of how I use the above structure is below:
template< typename t_source, typename t_data > typename boost::enable_if< boost::mpl::and_
, boost::is_pod >, t_source ::type& operator>> ( t_source& source, t_data& data ) { source.Read( reinterpret_castboost::uint8_t*( &data ), sizeof( t_data ) ); return source; }
I don't see is_sink in there. This might help you: <plug> http://boostpro.com/tmpbook </plug> -- Dave Abrahams BoostPro Computing http://www.boostpro.com