$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Joel de Guzman (joel_at_[hidden])
Date: 2008-01-13 01:55:16
Steven Watanabe wrote:
> AMDG
> 
> Joel de Guzman wrote:
>> Valid Expressions:
>>
>>      Expression              Semantics
>>      ---------- 
>> --------------------------------------------------------
>>      C::labels               An MPL Sequence of Integral Constants
>>   
> 
> I think that a case should only have a single label.  Allowing multiple 
> labels
> makes the implementation harder without adding any significant utility.  
> See below.
Hmmm... Good point. So, we basically break a Case with one or
more labels to atomic parts? Nice.
> 
>>      case_<I>(f)             Returns a Case object with supplied
>> <snip more generators>
>>   
> 
> These can return fusion sequences of cases instead of plain cases.
> This has the additional benefit that switch_ can be specified as taking
> a fusion sequence of cases, without having to handle a single case 
> specially.
Right! Makes sense. But wouldn't that use more compile time
resources? Well, you know better :-)
> 
>>      default_(f)             Returns a Case object with an empty labels list.
>>                              forwarding to the encapsulated function object f.
>>   
> 
>  From the standpoint of the implementor of switch_, how do I figure out 
> which
> Case is the default?
I thought it would be just a check:
     mpl::empty<C::labels>
But if you want single labels for each Case, then, perhaps:
     is_same<C::label, none>
or somesuch. Am I missing something?
>>    * case_c and case_range_c are simple shortcuts. The type of
>>      integral constant is int. The actual type can be casted to
>>      the actual switch parameter. I think this is safe
> 
> Since the value is known at compile time the cast can be checked at 
> compile time to detect overflow.
Oh, so, you are also in favor of the former? So we all are.
Regards,
-- Joel de Guzman http://www.boost-consulting.com http://spirit.sf.net