
hi all I am trying to use mpl to do some simple type computation that involves nest if statements The logic is somewhat like if(T is Libor) return LiborType if( or( or(T = Euribor, T = EURLibor), is_base_of(T, Libor) ), ConstrType2, if( or(is_base_of(T, Euribor), is_base_of(T, EURLibor)), ConstrType1, ConstrType ) ) When I first coded it and instantiate T with some derived class of Libor, the final type is always a generic type. Few more testing shows that the inner if_ in the code below typedef typename boost::mpl::if_ < boost::is_same<InType, QuantLib::Libor>, QuantLib::Libor, boost::mpl::if_ < boost::mpl::or_ < boost::is_same<InType, QuantLib::Euribor>, boost::is_same<InType, QuantLib::EURLibor>, boost::is_base_of<QuantLib::Libor, InType> > ConstrType2, boost::mpl::if_ < boost::mpl::or_ < boost::is_base_of<QuantLib::Euribor, InType>, boost::is_base_of<QuantLib::EURLibor, InType> >, ConstrType1, ConstrType > > >::type Type; does not reduce to ConstrType1/ConstrType2/ConstrType but the whole is used as a type. So the final Type is just a type with 3 nested if_ class inside. I tried linearising the logic but this introduces other problem. Is this a bug or a limitation of mpl::if_? Thanks