Tobias Schwinger wrote:
(c0,c1,...,cN) being just another 'Case' rather than a 'Sequence'. o..k... Hmm.. so how would the resulting case object for this expression look like:
case_c<1>(f1), case_c<2>(f2)
?
template< class SeqCases > struct sequenced_case { SeqCases seq_cases;
typedef SeqCases seq_cases_t;
sequenced_case(SeqCases const& s) : seq_cases(s) { }
typedef mpl::transform_view< SeqCases, fusion::result_of::first<_> > labels;
template< typename Result, class I > Result apply(I const&) { return fusion::at<I>(this->seq_cases); } };
If case_c<1>(f1) has the type C1 and case_c<2>(f2) has the type C2 the comma operator's result type is
sequenced_case< joint_viewC1::seq_cases_t,C2:::seq_cases_t >
'seq_cases_t' would not have to be part of the Concept, because 'switch_' doesn't care about it.
Sounds good to me! I like it. So, this involves the variation where a case has an MPL sequence of labels. I knew there's something in that that I like. Intuition, I guess. That is also why I use the name case_ regardless of number. A compound case is just another case anyway. Does not matter how many labels it serves. Not sure how, implementation-wise, this works for Steven. Steven? If this pans out, I'll refine the concept one more time. Regards, -- Joel de Guzman http://www.boost-consulting.com http://spirit.sf.net