Re: Switch and case syntax restriction
In article <b9PRi.11673$ZA.7630@newsb.telia.net>,
henke@henke37.cjb.net (Henrik Andersson) wrote:
It is not too hard to describe, I just did.
Not with nearly enough rigor to be a standards proposal.
Suppose I had the following class:
struct MyInt
{
operator int() const { return i + 1; }
bool operator==(int j) const { return i == j; }
int i;
};
//...
MyInt mi;
//...
switch (mi)
{
case 1:
DoSomething();
break;
case 2:
DoSomethingElse();
break;
}
What are the semantics of the above? What are the semantics if I make
any combination of the following changes:
1. Remove operator int from MyInt
2. Remove operator== from MyInt
3. Make the case labels variables instead of constants
4. Make the case labels const variables
5. Allow operator== to modify the internal state of MyInt
6. Allow operator int to modify the internal state of MyInt
Etc., etc.
Is it still 100% backwards compatible? I've only thought about this for
a few minutes; have I even covered all the possibilities yet?
And evidently, you understood.
The devil is in the details. And it is an awful lot of details to get
right for something that, quite frankly, isn't more than syntactic sugar
over if/else. Worse, it make all switch statements harder to read, as
one now has to understand the type of every label and variable being
switched upon before I know its semantics.
--
Nevin ":-)" Liber <mailto:nevin@eviloverlord.com> 773 961-1620
---
[ comp.std.c++ is moderated. To submit articles, try just posting with ]
[ your news-reader. If that fails, use mailto:std-c++@ncar.ucar.edu ]
[ --- Please see the FAQ before posting. --- ]
[ FAQ: http://www.comeaucomputing.com/csc/faq.html ]