Slashdot Mirror


Microsoft's C++/CLI Spec Has an Identity Crisis

Andy Updegrove writes "Microsoft's submission of its XML Reference Schema to Ecma has gotten lots of attention in recent months, because Microsoft offered it to Ecma to try to neutralize Massachusetts' adoption of the OpenDocument Format (ODF) standard. But last week it's earlier submission of C++/CLI to Ecma was in the limelight when the U.K. representatives to ISO cried foul over (of all things) its name, which they said was confusingly, and inappropriately, similar to C++. Some think that there may be more afoot, including the potential for Microsoft to add proprietary extensions after ISO finally adopts the new standard under a different name. Either way, the C++/CLI experience represents an interesting dry run for what to expect as Microsoft pushes the XML Reference Schema throught the same process."

34 of 154 comments (clear)

  1. It's all in how you read it by smittyoneeach · · Score: 2, Interesting

    C++ Continues Linux's Invasion
    651 (DCLI)
    C++ Command Line Interface

    The name, as submitted, is a sufficient train-wreck that people savvy enough to know a compile shan't confuse it with something they want. Possibly it will appeal to the PHB audience.

    --
    Get thee glass eyes, and, like a scurvy politician, seem to see things thou dost not.--King Lear
  2. Spellcheck. Please. by lightyear4 · · Score: 2, Funny

    ..as Microsoft pushes the XML Reference Schema throught the same process.

    thought + through = throught != a well perused article summary.

    1. Re:Spellcheck. Please. by eikonos · · Score: 2, Funny

      Grammar? Who the how are what the, Harry Potter?

  3. Sounds like a molehill masquerading as a mountain by BadAnalogyGuy · · Score: 2, Interesting

    This doesn't seem to be anything more than someone who's got his panties in a bunch about Microsoft and is creaming between his thighs about the chance to stick it to the Man.

    C++/CLI seems to be a (standardized) proprietary extension to the C++ language that allows it to interface well with the rest of the .Net architecture. It's not a huge departure from the core language by any means, at least not enough of one to require a complete name change.

    On the one hand, you've got Microsoft who is willing to label various related products under one brand (Windows, .Net, etc) and on the other hand you've got a group who is relatively unwilling to give Microsoft the time of day.

    I'm not saying that ISO's wrong, but they could certainly stand to pull that rod out of their collective asses.

  4. Re:The name _is_ confusing. by r00t · · Score: 2, Insightful

    No kidding. ".net++" would be kind of sane.

  5. Re:Sounds like a molehill masquerading as a mounta by BadAnalogyGuy · · Score: 2, Funny

    I actually think that's a pretty good analogy

    Dammit!

  6. Re:Sounds like a molehill masquerading as a mounta by radtea · · Score: 4, Insightful

    C++/CLI seems to be a (standardized) proprietary extension to the C++ language that allows it to interface well with the rest of the .Net architecture. It's not a huge departure from the core language by any means, at least not enough of one to require a complete name change.

    Compilers have no sense of humour. If a language is not ISO C++, it is not C++ and should not have C++ as part of the name. I'm dating myself, but I've worked with "FORTRAN" compilers that didn't support FORTRAN 77 (which was the standard at the time) and to all intents and purposes they were not FORTRAN compilers--they were "some proprietary FORTRAN-like-language compilers" and completely useless if you wanted to compile many perfectly ordinary FORTRAN programmes.

    The issue here is that the use of the C++ name is a big marketing issue. But to apply the C++ name in any variant to a language that is not C++ is fundamentally misleading and dishonest. This is because humans are lazy and stupid, and tend to drop the modifier and think of "C++/CLI" as simple "C++"--the article points out that MS documentation has many examples of code samples labelled "C++" with no "CLI" modifier that are not, in fact, C++. They are C++/CLI.

    And as I said, compilers have no sense of humour--they don't care that "C++/CLI" is "almost" C++. They see non-standard syntax and barf. So it is very important for those of us who want our code to compile and who want to be able to communicate with others to keep the name "C++" as pure as possible. This isn't being uptight--it is a purely pragmatic concern about keeping marketing droids as far from technology as possible so that software professionals can communicate with each other as clearly and unambigously as possible given the limitations we all have as human beings.

    --
    Blasphemy is a human right. Blasphemophobia kills.
  7. Plus Plus! by tepples · · Score: 2, Insightful

    The issue here is that the use of the C++ name is a big marketing issue. But to apply the C++ name in any variant to a language that is not C++ is fundamentally misleading and dishonest.

    The same argument could have been advanced against the name C++ itself: "The issue here is that the use of the C name is a big marketing issue. But to apply the C name in any variant to a language that is not C is fundamentally misleading and dishonest." Along these lines, I don't see anything wrong with something like "C++ Extensions for CLI" so long as the name makes it clear that it's an extension to C++98 and/or C++0x.

    1. Re:Plus Plus! by angel'o'sphere · · Score: 3, Interesting

      This is completely wrong.

      C++/CLI might be the name of the standard, what it means is: having a standard that defines how C++ is compiled to .NET byte code and executed in the .NET FrameWork.

      C++/CLI or C++/.NET is essentially: C++. However with added tweakes like finalizers (yepp, thats not a destructor), (optional) garbage collection bublic/private classes liek in C#/Java and a mapping from primitv data types on .NET System Classes like System.Int32 etc.

      Further all primitive datatypes have a determined size, unlikey ISO C++ where still only char <= short <= int <=long is valid which means often that char == 1 byte and the rest is 4 bytes.

      Finally a lot of typical C# (or .NET) like threading etc. and finalization has to have a counterpart in C++/.NET which is defined in C++/CLI.

      a typical C++ clas in .NET mitght look like:

      public class __gc MYClass {
            !MyClass() { ... } // finalizer - called after/during GC
            ~MyClass() { ... } // destructor (like in standard C++)
            MyClass() { ... } // ....
      }


      HINT: don't write new programms in C++/.NET except you need fancy stuff like templates (but I'm not sure how templates exactly work in C++/.NET ... I could imagine tehy are only generics, but I think they are still templates like in Visual C++).

      If you need to write new code in .NET then only use C++/.NET to port/interface with existing C++ code, otherwise all those subtible changes that are made in C++/.NET versus ordinary C++ (or MS Visual C++) will drive you completely mad!!

      angel'o'sphere

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    2. Re:Plus Plus! by CaymanIslandCarpedie · · Score: 2, Insightful

      I preface this by saying I know I'm being anal (sorry) ;-)

      c++/cli is NOT descended from c or c++. Its descended from net.

      I'd have to disagree with that. At least if we are to consider c++ a descendant of c, than calling c++/cli a descendant of c++ could certainly be valid while calling it a descendant of .NET really doesn't make any sense.

      .NET is a common langage runtime, common type system, meta-data about assemblies and thier internals, etc. In a nut-shell you can consider .NET a virtual machine. While that is not at all acurate in the VMWare sense of the word, in the JVM sense its probably as accurate as can be without going into huge detail.

      Anyway, the point is .NET is anything but a "language" like c, c++, FORTRAN, ect though .NET does include Common Intermediate Language (CIL), it is the equivelent to Java byte-code and not really a langange as a developer would think of it. Since .NET is NOTHING like c++/cli, I don't see how you can consider it a descendant of .NET.

      Think about it like OOP. If an object B inherits from another object A than object B will have all the same properties, methods, etc as object A. Object B will have some extra stuff and may override some of the original objects stuff, but basically Object B is Object A with "extensions". In that sense c++ may be a descendant of c and c++/cli may be a descedant of c++ (but certainly not .NET).

      Now perhaps a better name for this would be something like c++.NET as what these extensions mainly do is provide the c++ lanange (or at least MS's version of it) with an interface to the .NET environment and in fact I think that would perhaps be more clear and help resolve this situation. However, with MS calling everything xxx.NET perhaps they are trying to kick that habbit ;-)

      --
      "reality has a well-known liberal bias" - Steven Colbert
    3. Re:Plus Plus! by Anonymous+Brave+Guy · · Score: 4, Insightful
      The same argument could have been advanced against the name C++ itself: "The issue here is that the use of the C name is a big marketing issue. But to apply the C name in any variant to a language that is not C is fundamentally misleading and dishonest."

      You're comparing apples to oranges.

      Stroustrup didn't go around "casually" referring to C++ as C using a multi-million-dollar PR machine. On the contrary, he has written extensively about the relationship between C++ and C as the newer language has evolved, and has always been clear about the significance of having similar syntaxes and where the differences start.

      Microsoft, on the other hand, frequently do refer to C++/CLI simply as C++. They even have a column on their MSDN web site called Pure C++; would you like to guess whether the C++ in question is the ISO standard variety or the C++/CLI one? That one's a real shame, and I'd have expected better from a distinguished C++ expert like Stan Lippman.

      --
      If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
    4. Re:Plus Plus! by radtea · · Score: 4, Insightful

      C++/CLI or C++/.NET is essentially: C++.

      This is false. To you all the nice people who have thoughtfully replied to my comment with pedantic outrage, let me remind you what hummassa (157160) has pointed out in a mysteriously low-moderated response:

      C++/CLI will not compile the STL.

      This has been my own experience with C++/CLI, and one of the primary reasons for my being so hard-assed about the name. This is not a minor deviation from the standard. It is a radical deficiency. The STL is a core piece of any C++ programmer's toolkit, and any compiler in 2006 that will not compile it is not a C++ compiler, and should never be refered to as C++, and should not have a name that could possibly be confused with C++.

      This is like having a FORTRAN compiler that can't handle LAPACK. If I created something called FORTRAN/CLI that couldn't compile LAPACK people would rightly yell at me. MS deserves to be smacked on the nose with a rolled up newspaper for doing the equivalent to C++.

      --
      Blasphemy is a human right. Blasphemophobia kills.
  8. Re:Sounds like a molehill masquerading as a mounta by MBCook · · Score: 4, Insightful
    I saw this somewhere else the other day. The problem is not that they created this version of the language, but what they are calling it. If they called it "C++.Net" all over the place, no one would complain. Even if they called it "C++/CLI" which I think is a little more unwieldy for general use.

    But the problem is that MS has taken to calling it.. C++. We already have a C++. If you look at MSDN they have C++.Net code all over the place, but they never call it that. They always call it C++. They make a C++.Net complier, but they just call it C++. From what I've read, they seem to be almost purposely trying to confuse the difference between C++ and C++.Net.

    The worry seems to be that if this standard is ratified, MS will continue this practice. One can argue they have done this in the past, trying to confuse J++ and Java (J++ being their "version" of Java). While this all does seem a bit nit-picky, I think it is important.

    --
    Comment forecast: Bits of genius surrounded by a sea of mediocrity.
  9. Interetingly by Utopia · · Score: 3, Interesting

    The prominent C++ expert Herb Sutter is the lead architect of C++/CLI.
    He also chair the ISO C++ standards committee.

  10. Various corrections and more information. by jdennett · · Score: 5, Informative

    (And some opinions too; I'll leave you to work out which are facts and which are opinions.)

    It's the UK's panel that has submitted this paper to ISO; the UK panel is part of BSI, the British Standards Institute, one of the NB's (National Bodies) making up ISO.

    The biggest problem is that ISO should not publish two standards which are for such different languages with such similar names, and encourage the confusion. Standards are there to reduce confusion, not to contribute to it.

    And make no mistake, C++/CLI is a huge departure from the core language. It introduces a whole new type of pointer, it adds generics to C++ templates, it abandons const-correctness for core using "ref" classes, it has yet another string type (this time somewhat integrated into the language rather than being a pure library entity), it adds mandatory garbage collection (C++ has always permitted, but not required, GC, though with some caveats) in a way not consistent with previous work with GC in C++, and there's more I'm sure.

    It's also a concern that C++ may wish to expand into areas overlapping with those that are covered by Microsoft's language "C++/CLI", and may not wish to do so in the same way as C++/CLI, which is mostly just one of a pile of vendor-specific extensions to C++.

    ISO is about standardizing existing practice. Some of the biggest problems with existing C++ and C standards has been when they got too inventive, and accepted into the standards things that were implemented in few (or no) compilers. So far as I know, there's still only one compiler that supports C++/CLI (though I've a feeling one other company is working on one).

    Microsoft and the ISO C++ groups have been getting along a lot better in the last few years; Microsoft returned to attending committee meetings, and hired some great people, both names that get publicity and some that don't. However, Microsoft is still a large company with a monopoly in certain areas, and some history of anticompetitive practices, and it seems sensible for us to tread carefully.

    1. Re:Various corrections and more information. by legirons · · Score: 2, Funny

      "Standards are there to reduce confusion, not to contribute to it"

      Apparently ISO didn't get that memo:

      Kilobyte

  11. Re:Sounds like a molehill masquerading as a mounta by SnprBoB86 · · Score: 3, Informative

    C++/CLI is, in fact, a strict superset of C++. Any C++ code that compiles without the /clr flag should compile without any complaints with the /clr flag. Linking, however, is another story. Because the result of a /clr linking is different than a native linking, there is no guarentee that C++ code will link correctly.

    "Managed C++" or "C++ with Managed Extensions" or "C++/CLI" or "C++.net" or whatever you want to call it (Microsoft has done a very poor naming job with the entire .NET brand) IS STILL C++

    --
    http://brandonbloom.name
  12. So what? by kclittle · · Score: 3, Insightful
    So what if MS tries to super-set C++ -- big deal! The industry as a whole has only been doing this to C for, oh, 30 years or so? Have you ever looked at list of advanced, non-standard features of "GNU C" (note the full name in quotes)? And I don't recall in which C compiler I first saw support for the end-of-line comment "//" (Vax C?), but is sure as hell was non-standard at the time. I don't recall any pulling of hair and renting of garments over that.

    --
    Generally, bash is superior to python in those environments where python is not installed.
    1. Re:So what? by kclittle · · Score: 2, Insightful
      The point is, adding non-standard enhancements to C is a long accepted practice. Even when done by big, powerful companies. And, IIRC, no one considered it all that obnoxious, as long as it didn't break old code (i.e., was either a superset feature or could be controlled by compile-time options). It was competing, it was innovation, it was pushing the envelope. Now, all of a sudden, because it's MS, it's "news", it's "oooooooo, scary!". Baloney. This is just slashdot paranoia and/or bias at its worst.

      --
      Generally, bash is superior to python in those environments where python is not installed.
    2. Re:So what? by mrchaotica · · Score: 2, Insightful

      ...and all the C I write -- despite the fact that it only targets platforms with GCC -- gets compiled with the -ansi flag.

      --

      "[Regarding the 'cloud,'] ownership was what made America different than Russia." -- Woz

    3. Re:So what? by julesh · · Score: 2, Funny

      And I don't recall in which C compiler I first saw support for the end-of-line comment "//" (Vax C?), but is sure as hell was non-standard at the time. I don't recall any pulling of hair and renting of garments over that.

      You don't? Obviously you've never read comp.lang.c.

    4. Re:So what? by MooCows · · Score: 2, Informative
      I don't know much about C++/CLI, but this is different from what I've heared before (of course what I've heared before may be wrong). Could you please post a valid C++ program which would behave different under C++/CLI?

      Well, as far as I know any C++ code compiles just fine in with C++/CLI extensions enabled.
      Just last month I wrote a C++/CLI wrapper class for a large C++ codebase so our .Net applications could link up with it. No code in this substantially large library had to be altered so it could compile in C++/CLI. The C++/CLI extensions are only needed to interface with .Net.
      Also note that the code was originally 'written for' GCC++. :P

      So for example, take this pseudocode:
      String^ GetText(int index)
      {
      char* ctext = myNativeLibrary->GetText(index);
      String^ text = gcnew String(ctext);
      delete[] ctext;
      return text;
      }
      The method GetText can now be called from any .Net application, and will return the .Net type String. Everything in myNativeLibrary is just plain old C++, without garbage collection or .Net library support.
      --
      The path I walk alone is endlessly long.
      30 minutes by bike, 15 by bus.
  13. Re:Sounds like a molehill masquerading as a mounta by slashdotnickname · · Score: 2, Insightful

    If a language is not ISO C++, it is not C++ and should not have C++ as part of the name.

    What a load of crap.

    C++ was well established on all major platform long before ISO standardized it. I know I've written my share of #ifdef/#define's to make code more portable between IRIX and othe *nix variants in my 15 plus years of C++ coding.

    If you want to write a (mostly)cross-platform C++ program then use ISO C++. But if you want to reuse your C++ code and integrate it with newer .NET technologies, then C++/CLI is perfect. Any C++ coder worth anything will know that the term "C++" by itself does not fully describe a C++ project's language.

  14. Re:ANSI by kupci · · Score: 4, Informative

    As a matter of Stroustrup has commented. In a nutshell, he says that Microsoft is revising their documentation to minimize confusion.

  15. Link to Groklaw by kupci · · Score: 5, Informative
    Some additional detail with good comments on this subject available over at Groklaw.

    Stroustrup's comment. Apparently Microsoft is revising their documentation to clear up the confusion.

  16. Re:Sounds like a molehill masquerading as a mounta by mrchaotica · · Score: 2, Interesting
    How could you not be confused by it? Here's the sequence of events:
    1. You're working on an ISO C++ project
    2. You some particular functionality, so you search for it on the Internet.
    3. You find a library that seems to do what you want at MSDN.
    4. It's labeled "C++" (not "C++/CLI" or ".NET", just plain old "C++").
    5. You download it, figure out the API (i.e. look at documentation, not the code itself, so you don't see the weird syntax), and integrate calls to it into your code.
    6. You try to compile, and it fails horribly.
    7. After some time spent debugging, you finally notice that it isn't normal C++ like it said it was, it's actually some kind of proprietary extension that you can't use.
    8. You get really pissed off because you just wasted several hours.
    --

    "[Regarding the 'cloud,'] ownership was what made America different than Russia." -- Woz

  17. Re:Sounds like a molehill masquerading as a mounta by julesh · · Score: 2, Insightful

    If a language is not ISO C++, it is not C++ and should not have C++ as part of the name.

    So I guess there weren't any C++ compilers between 1997 when the language was standardised and some time around 2001 when the compiler vendors started catching up with the features that had been included in the spec?

    Perhaps my copy of Borland C++ 4.5 from ~1994 isn't a C++ compiler at all, because the language hadn't been standardised when it was written?

    Here's a clue for you: in the real world, we call a compiler a C++ compiler if it compiles C++ code. It doesn't have to compile *all* C++ code for this to be true, just a useful subset. If it complies with the spec, so much the better. These we'll call ISO C++ compilers if we're in the mood to distinguish between them.

    The same happened with C when it was first standardised. The standard described a language substantially different from what older compilers understood and compiled, but those compilers didn't cease being C compilers just because they couldn't compile all the code that the spec said complying compilers had to. They just weren't ANSI C compilers.

  18. I'm glad people are complaining about this. by alyosha1 · · Score: 3, Informative
    I've already been bitten by this - I wrote a perfectly short C++ program as a tutorial for a friend, using VC++ 2003, but when he tried to compile it on VC++ 2005 it gave this warning:
    warning C4996: 'std::_Transform' was declared deprecated
    which implies, at least to the novice developer, that the use of the standard c++ algorithm library is no longer considered appropriate practice. This is extremely annoying and misleading. One of the major strengths of C++ is that you can extend it almost limitlessly without changing the underlying language. As far as I can see, for every extension that people have tried to add to the language to support a particular paradigm, it has been shown that the same effect can be achieved without going beyond the bounds of the language.
    For example, Qt introduces signals and slots as an extension, but the same effect can be achieved with libsigc++ or boost::signals, making intelligent use of the template system. Smart pointers and garbage collection have been demonstrated by boost::shared_ptr and so on.
    I understand that in the past weaknesses in implementations of C++ made some of these extensions necessary, but now that we have compliant compilers that actually implement almost all of the language standard, there are less and less reasons to create proprietary extensions to it.
    1. Re:I'm glad people are complaining about this. by ardor · · Score: 2, Interesting

      Actually, Qt signals can not be achieved by template-based signals, since Qt signals allow limited introspection, which is impossible with template-based ones. This comes in handy when serializing signal-slot-connections, for example.

      --
      This sig does not contain any SCO code.
  19. Boys, boys, calm down. by hummassa · · Score: 2, Informative

    The difference between the cases you all made is simple:

    0. C++ (at one time, at least) EXTENDS C
    1. moc/Qt EXTENDS C++
    2. C++Builder "properties" and VCL EXTENDS C++

    but

    2. C++/CLI LIMITS C++ (no multiple inheritance, no metaprogramming, etc etc) -- more than it extends it (.net class libraries)

    --
    It's better to be the foot on the boot than the face on the pavement. ~~ tkx Kadin2048
  20. Short answer: no. by hummassa · · Score: 3, Informative

    > Does c++.net run ansi c++ code? Then its C++

    Long answer: NO. C++/CLI does not have multiple inheritance; it does have generics, which are templates without the metaprogramming possibilities -- because it does not have templates. Henceforth, the STL does not work under C++/CLI. Nor does Boost.

    It does have annotations on classes and methods, reference/value class dichotomy, garbage collection built-in (as opposed to library-based), finalizers (one strange kind of destructor), its generics have type restrictions (like the new templates planned for C++0x -- of which I'm not a big fan)

    It's as different from C++ as is C# or Java, really.

    --
    It's better to be the foot on the boot than the face on the pavement. ~~ tkx Kadin2048
  21. Re:Sounds like a molehill masquerading as a mounta by Anonymous+Brave+Guy · · Score: 3, Interesting

    You're still missing my point. You fundamentally assume that all developers are aware of portability issues, standardisation issues, the technical details of exactly what is and what isn't in ISO C++, the nature of Microsoft's .Net platform and the C++/CLI language, and so on.

    Take a look at any C++ newsgroup, preferably one of the unmoderated ones with a lot of newbies asking for help. Observe their level of understanding (or otherwise) of exactly how even standard C++ works. They frequently don't "get" concepts like undefined behaviour, compiler extensions, and standard vs. non-standard libraries. A huge number of the problems posted on such groups come directly from making that sort of mistake; some groups have dozens of examples every week. Some people will even aggressively defend their misconceptions, telling other (correct) posters that they don't know what they're talking about because "it works on my compiler". This has been happening with GCC extensions for years, and it's already happening with Microsoft extensions as well.

    So yes, I'm completely convinced that there are huge numbers of new and inexperienced programmers out there who really won't appreciate the significance of tying themselves into Microsoft's platform. Moreover, it is naive to pretend that Microsoft doesn't know this very well. Their whole marketing strategy, which the BSI guys are rightly challenging, seems to be based on creating this ambiguity in people's minds. I've mentioned the "Pure C++" column and random blog post misterminology elsewhere in this thread. There are simpler things too, like highlighting C++/CLI reserved words even when you're editing native C++ code in the IDE, as if they were a part of standard C++, and including C++/CLI and .Net material prominently in help pages even when nothing implying this platform is selected in the filters.

    I'm no arbitrary MS-basher -- go ahead and check my previous posts, and you'll find sometimes I support them and others I don't -- but in this case, I think they have a blatant strategy for trying to abuse the system, and it's quite right that those responsible for maintaining that system call them on it. If they had tried this with any well-known language with a major commercial backer, they would have been sued into oblivion by now, probably with a court order not only preventing standardisation under their derivative name but also preventing them from even marketing their own product with it.

    --
    If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
  22. Re:C++/CLI supports templates, people! by Jeremi · · Score: 2, Insightful
    The only real C++ feature that isn't supported is multiple inheritance (with the exception of interface implementation). And that's just fine with me.


    It sure as hell isn't fine with me. I use multiple inheritance a lot, and if Microsoft's language doesn't support it, that means I would have to throw away (or at least, radically redesign) most of my existing code in order to use their compiler. The whole point of having a standardized language specification is so that you can migrate existing code without rewriting it. So their new language may be many things, but without multiple inheritance it's not C++.

    --


    I don't care if it's 90,000 hectares. That lake was not my doing.
  23. Re:C++/CLI supports templates, people! by Jeremi · · Score: 2, Informative
    Sure you can, you'll just have to continue compiling it as regular c++, with an c++/cli interface layer if you want to access it from .net.


    Right, I could use a cross-language interface layer, the same as if I had written the code any other non-compatible language. Which is the point: Without MI, C++/CLI is not C++ in any meaningful sense of the term. It's a separate, similar-but-incompatible language, much like C# or Java.


    And gratuitous use of multiple inheritance is bad design, so you might want to think about that. Yes it's a good thing sometimes, but this is VERY RARE - it always increases complexity and can cause problems later, it's just that sometimes the benefits are worth it.


    I agree that it's very easy to misuse multiple inheritance and get into trouble, and I have been bitten by that in the past. From those experiences I was able to learn where MI is helpful and where it isn't, and now I use it only when it's appropriate. But really, whether MI is considered "good", "bad", or "ugly" is beside the point -- it's an integral part of C++, and a language that doesn't support it simply can't claim to be "C++ ".

    --


    I don't care if it's 90,000 hectares. That lake was not my doing.