The 25 days of C++mas - December 22 - C++ standard support in C++Builder 32 and 64 bit compilers

Posted by on in Blogs
C++Builder XE3 includes 3 C++ compilers:  bcc32.exe (32-bit Windows), bccosx.exe (32-bit Mac OS X) and bcc64.exe (64-bit Windows).  BCC32's C++0x language enhancements were first added in C++Builder 2009.  C++Builder XE3's new C++11 64-bit Windows compiler supports the same C++11 language standard as the clang compiler (version 2.9, 3.0 and 3.1).  The following is a list of C++11 language features that are supported in all three C++Builder XE3 compilers (command line and integrated compilers). Note: the list is subject to change based on the release and update/hotfix builds - please refer to the Embarcadero DocWiki which will always have the latest information and documentation.

C++ Language support by compiler
The following is a partial listing of the C++ 0x and C++11 language support included in the bcc32, bccosx and bcc64 compilers. I will keep updating this list until it contains all of the C++11 standard items and Yes/No/Partial support for each compiler.




















































































































































































































































































































































































    Language Feature bcc32 bccosx bcc64
    C++ 11
    Rvalue references Yes Yes Yes
    Initialization of class objects by rvalues No No Yes
    Non-static data member initializers No No Yes
    Variadic templates No No Yes
    Initializer lists No No Yes
    Static assertions Yes Yes Yes
    auto-typed variables No No Yes
    Multi-declarator auto No No Yes
    New function declarator syntax No No Yes
    Lambda expressions No No Yes
    Declared type of an expression Yes Yes Yes
    Incomplete return types No No Yes
    Right angle brackets No No Yes
    Default template arguments for function templates No No Yes
    Solving the SFINAE problem for expressions No No Yes
    Template aliases No No Yes
    Extern templates Yes Yes Yes
    Null pointer constant No No Yes
    Strongly-typed enums Yes Yes Yes
    Forward declarations for enums Yes Yes Yes
    Generalized attributes No No No
    Generalized constant expressions No No Yes
    Alignment support "alignof" "alignof" Yes
    Delegating Constructors No No Yes
    Inheriting Constructors No No Yes
    Explicit conversion operators Yes Yes Yes
    New character types Yes Yes Yes
    Unicode string literals No No ?
    Raw string literals No No Yes
    Universal character name literals ? ? ?
    User-defined literals No No No
    Standard Layout Types ? ? ?
    Defaulted and deleted functions No No Yes
    Extended friend declarations No No Yes
    Extending sizeof No No Yes
    Inline namespaces No No Yes
    Unrestricted unions No No Yes
    Local and unnamed types as template arguments No No Yes
    Range-based for No No Yes
    Explicit virtual overrides No No Yes
    Minimal support for garbage collection and reachability-based leak detection No No ?
    Allowing move constructors to throw [noexcept] No No Yes
    Defining move special member functions No No ?
    Concepts [not part of C++11] No No No
    Concurrency
    Sequence points No No No
    Atomic operations No No ?
    Strong Compare and Exchange No No ?
    Bidirectional Fences No No ?
    Memory model No No No
    Data-dependency ordering: atomics and memory model No No No
    Propagating exceptions No No ?
    Abandoning a process and at_quick_exit No No No
    Allow atomics use in signal handlers No No ?
    Thread-local storage No No No
    Dynamic initialization and destruction with concurrency No No No
    C99 Features in C++11
    __func__ predefined identifier No No No
    C99 preprocessor No No No
    long long Yes Yes Yes
    Extended integral types No No No


Comparisons with other C++11 compilers

There is documentation on the internet for several C++ compilers that lists the C++11 compatibility results for current and past releases. I make no claim to the quality or completeness of the C++11 language compliance for any compilers. I include the links so that you can do your own investigations and comparisons.

C++11 compliance

I am working with our R&D, Q/A and Product Management team to create a document and site where you can explore the C++11 language compliance results based on our testing using the Plum Hall C++ validation suite (stay tuned in January for additional details).

Watch/Download the C++Builder 64-bit Compiler Preview Video

Additional details about the 64-bit C++Builder compiler are available in the preview video.  Watch the C++ 64-bit compiler preview video on YouTube at http://www.youtube.com/watch?v=PwwMpBUoR6Y. You can also download the MP4 video file at http://cc.embarcadero.com/item/29197.  The preview video is 9 minutes long.

Try the C++Builder 64-bit compiler

The C++Builder XE3 and RAD Studio XE3 free trial downloads have been updated to include the new C++Builder 64-bit compiler.  Trial downloads are available at https://downloads.embarcadero.com/free/c_builder

Happy C++mas!

During the first 25 days of December leading up to Christmas, I will blog about the release of the C++Builder 64-bit compiler for Microsoft Windows and C++Builder XE3 support for building VCL and FireMonkey 2 applications.
About
Gold User, Rank: 1, Points: 2466
David Intersimone (known to many as David I.) is a passionate and innovative software industry veteran-often referred to as a developer icon-who extols and educates the world on Embarcadero developer tools. He shares his visions as an active member of the industry speaking circuit and is tapped as an expert source by the media. He is a long-standing champion of architects, developers and database professionals and works to ensure that their needs are folded into Embarcadero's strategic product plans. David holds a bachelor's degree in computer science from California Polytechnic State University at San Luis Obispo, California.

Comments

  • Guest
    Tomohiro Takahashi Sunday, 23 December 2012

    David-san
    > Raw string literals
    bcc64 is YES

  • Guest
    Vladimir Monday, 24 December 2012

    auto-typed variables is not supported by CBuilder32

  • Guest
    David Intersimone Monday, 24 December 2012

    Vladimir: I just compiled the following statements in a C++Builder VCL application (one TButton) using the C++32-bit compiler in C++Builder XE3 update #1.

    int foo()
    {
    return 11;
    }

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    auto x = 10;
    auto x1 = foo();
    auto y = 3.14;
    int i=10;
    auto a = 1, *b = &i;
    Button1->Caption = IntToStr(*b);
    }

    http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1984.pdf

  • Guest
    David Intersimone Monday, 24 December 2012

    Takahashi-san: Thank you so much. I just updated the table for Raw string literals. Merry Christmas to you and to all of my friends in Japan.

  • Guest
    Vladimir Monday, 24 December 2012

    May be you have different version of the Cbuilder?
    I checked many times (XE3 update1) and
    auto val = 3.14; always shown me val==3.00

    if this has to be 3.14 for Win32 I'll put this issue to the QC.

  • Guest
    Vladimir Monday, 24 December 2012

    And again, auto is the storage class for Builder32, so if we have auto val = 3.14; the default always will be int,
    but for the C++11 auto is the auto-typed.

  • Guest
    David Intersimone Tuesday, 25 December 2012

    Vladimir - thanks for the notes. You are right that way back in C++Builder 2009 we added some original C++Ox language extensions - http://docwiki.embarcadero.com/RADStudio/XE3/en/C%2B%2B0x_Features_Index. And since then we have not touched the C++ 32-bit compiler. One of our goals is to someday backport the new C++ 64-bit compiler back to 32-bit Windows - no time frame or firm promise yet - but definitely an aspirational goal.
    Sorry for the confusion.

  • Guest
    Tomohiro Takahashi Tuesday, 25 December 2012

    Davis-san
    > Template aliases (Template Type Aliases, Alias templates)
    bcc64 is YES

  • Guest
    Tomohiro Takahashi Tuesday, 25 December 2012

    David-san
    > Allowing move constructors to throw [noexcept]
    bcc64 is YES

  • Guest
    David I. Wednesday, 26 December 2012

    Takahashi-san - thanks again for the update comments. I will update the table. You are the best!

  • Guest
    Tomohiro Takahashi Wednesday, 26 December 2012

    David-san
    > Delegating Constructors
    bcc64(clang3.1) is NO

    Please correct it.

  • Guest
    Tomohiro Takahashi Wednesday, 26 December 2012

    Sorry, please ignore previous my comment.

    With bcc64(clang3.1)
    > Delegating Constructors Yes Inheriting Constructors Yes <---- incorrect, bcc64(clang3.1) is NO

  • Guest
    Tomohiro Takahashi Wednesday, 26 December 2012

    again,
    > Inheriting Constructors
    bcc64 is NO

  • Please login first in order for you to submit comments
  • Page :
  • 1