Translation Guide between Managed Extensions and the new C++/CLI binding Available

C and C++ programmers are notorious for relying on pointer indirection, and it seems blog entries are not immune to this. A translation guide attempting to exhaustively detail the differences between the original Managed Extensions for C++ (released with Visual Studio.NET) and the revised C++ binding to the CLI scheduled for Visual Studio 2005 (and attempting to provide some motivation behind each change) has been posted on MSDN at the following URL:


Although there has been considerable effort made in correcting all errors within the text, I am sadly aware that how imperfect these pieces of mine nevertheless turn out. So, on the one hand, I believe this guide will prove valuable to those needing this information. On the other hand, I also believe there are areas that (a) could have been made clearer, and (b) details that … well, that are in error. If you do use this guide and find either (a) or (b) (or some (c), (d), or (e) not itemized), please let me know, either by a comment to this entry or by a private email.


Speaking of which – comments, that is. Due to the open nature of the internet, the providers of this site have found it necessary to provide a form of budget firewall – that is, they have put in place a facility to moderate the comments. This basically means that I see each comment before it becomes public, and it requires a click of my mouse in order for it to be published. I have not – not as yet, anyway – not published a comment; however, oddly enough, I can’t prove that.


In any case, those of you whom have been reading this from the beginning will notice that patchwork pieces of the translation guide have been posted here in one form or another. Often, comments have helped me recognize shortcomings and recast material in a hopefully more comprehensible manner. For example, my treatment of deterministic finalization in the translation guide was considerably reworked to address some of the posted comments to the initial blog entry on that topic. As W.H.Auden said in a different context, a piece of writing is never finished, it is simply abandoned.

Comments (10)

  1. Alexei says:


    A FAQ for Visual C++ released recently:

    The FAQ mentions a couple of features for which no info was available previously. Specifically see the section about features to be impelemented in RTM which are not in Beta 1:

    1) Ref classes with automatic storage duration, including destructors, copy constructors (!), and assignment (!). (no example given)

    2) Operators (instance and global). (the example shows a ref class with an instance operator+())

    The above features make ref classes much closer to native classes in C++. Could you explain what those features are and how are they going to be different from the corresponding features of the standard C++?

  2. Albert says:

    When can we expect to see "mscfront" in beta? I have thousands of lines of code in the old syntax and I would love to test the migration utility.

  3. Rjae Easton says:

    A Wiki topic could provide a venue for dissemination and refinement while off-loading "comment management" from your plate.

  4. stan lippman says:

    honestly, i don’t know what that involves. i’ve looked at wiki once or twice but i don’t have any clue how to set it up … hint, hint …

  5. stan lippman says:

    albert asks, when can we expect to see mscfront in beta.

    my conception of the tool is that it will be made available for download as an informal or `brown bag’ binary [similar to how cfront 1.0 was released] on or around the time of beta2 …

    it will not be released `in the box’ and i imagine that i will post fixes to it as needed on a weekly or if necessary daily basis.

    it will come with a user guide, the translation guide. there are currently no plans to release it as source, but that may change — probably depending on how useless it is viewed 🙂

    hopefully that answers more questions than it raises. …

  6. stan lippman says:

    Alexei asks,

    1) Ref classes with automatic storage duration, including destructors, copy constructors (!), and assignment (!). (no example given)

    — yes, this is not turned on with the original beta1; we just released a `refresh’ today and i didn’t check if that includes it — you can read about it in my blog entry on `deterministic finalization’ and within the translation guide — hopefully i fixed the link — thanks for those who commented — in particular Eric Jarvi of msft who actually exlained to me what happened.

    2) Operators (instance and global). (the example shows a ref class with an instance operator+())

    yes, again. the design team impressed me with this — i was worried this would overwhelm — the ability to define a global, instance, and static operator+, for example.

    however, you cannot write a function object without the ability to overload the call operator (()), and the stl/cli port needed this sort of ability.

    so, yes to both your questions, although you may not find my answers providing sufficient detail.

    what you and everyone SHOULD DO is download the refresh of beta 1 — the team here worked very hard, and have provided both additional functionality (yes!) and significant bug fixes. so this is the bag of bits to begin pounding on.