Jaap Suter wrote: > Hi, Hi Jaap,
> > I apologize, but once again I'm unable to get a lambda > expression working with the MPL. > > The code works fine with the Intel and GCC compiler. On MSVC I get the > following error: > > error C2039: 'lhs_index' : is not a member of 'boost::mpl::arg<N>' It's the same problem we dealt with here - http://lists.boost.org/MailArchives/boost/msg41700.php. The easiest way to fix it within the current code base would be this: template< typename T > struct lhs_index_impl : T::lhs_index { }; template< typename T > struct lhs_index : mpl::if_< mpl::is_placeholder<T> , T , lhs_index_impl<T> > { BOOST_MPL_AUX_LAMBDA_SUPPORT(1,lhs_index,(T)) }; template< typename T > struct rhs_index_impl : T::rhs_index { }; template< typename T > struct rhs_index : mpl::if_< mpl::is_placeholder<T> , T , rhs_index_impl<T> > { BOOST_MPL_AUX_LAMBDA_SUPPORT(1,rhs_index,(T)) }; template < class Signature, class LhsIndex, class RhsIndex > struct predicate { typedef typename mpl::and_< typename mpl::equal_to< typename lhs_index<Signature>::type, LhsIndex >::type, typename mpl::equal_to< typename rhs_index<Signature>::type, RhsIndex >::type >::type type; BOOST_MPL_AUX_LAMBDA_SUPPORT( 3, predicate, (Signature, LhsIndex, RhsIndex) ) }; // Test code: typedef mpl::vector< signature< 1, 1, 1 >, signature< 4, 4, 0 >, signature< 5, 5, 0 >, signature< 4, 5, 1 > > signatures; typedef mpl::find_if< signatures, predicate< mpl::_1, mpl::size_t< 4 >, mpl::size_t< 5 > > >::type iter_0; That's not to say that it's something obvious and easy to figure out - I'll look if there is a simple way to workaround the compiler's deficiency that doesn't have this idiosyncrasy. Aleksey _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost