Here is something I've noticed going on various time, recently in the memory management threads, but as to avoid an already heated debate, I'll use enum types as an example.

We have a problem with the way enums are defined. If you have :

enum E { A, B, C }
E e;

We have (1)
final switch(e) with(E) {
    case A:
        // ...
    case B:
        // ...
    case C:
        // ...
}

But also have (2):
typeof(E.A | E.B) == E

When raising this, the discussion goes as follow
- "If you have (1), we can't have (2), as break guarantee (1) rely on."
 - "(2) is usefull. For instance UserID or Color"
 - "Then let's get rid of (1)"
 - "(1) is useful, for instance to achieve X or Y"
- "Let's create a new type in the language, (1) would be enum and (2) would be this new type"
 - "It adds too much complexity in the language"

This very conversation went on in a very lengthy thread a while ago (note, for SDC, I just dropped (2), typeof(E.A | E.B) == int and I consider it a closed issue).

It can go forever, as all reason given for every concern raised is valid. Yes, adding a new type is probably too much for the benefit, yes (1) and (2) are useful in various scenarios. And, by refusing to take a step back look at the problem as a whole, we can turn around forever and never conclude anything, benefiting only the status quo.

I've seen this attitude going on on various topics. This is the surest and fastest way to end up with C++ without the C source compatibility. I'd like that we just stop this attitude.

Reply via email to