Skip to content

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

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.

{ 13 } Comments

  1. Tomohiro Takahashi | December 23, 2012 at 6:42 pm | Permalink

    David-san
    > Raw string literals
    bcc64 is YES

  2. Vladimir | December 24, 2012 at 8:51 am | Permalink

    auto-typed variables is not supported by CBuilder32

  3. David Intersimone | December 24, 2012 at 9:04 am | Permalink

    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

  4. David Intersimone | December 24, 2012 at 9:06 am | Permalink

    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.

  5. Vladimir | December 24, 2012 at 9:58 pm | Permalink

    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.

  6. Vladimir | December 25, 2012 at 12:20 am | Permalink

    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.

  7. David Intersimone | December 25, 2012 at 9:29 am | Permalink

    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.

  8. Tomohiro Takahashi | December 25, 2012 at 7:32 pm | Permalink

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

  9. Tomohiro Takahashi | December 25, 2012 at 7:39 pm | Permalink

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

  10. David I. | December 26, 2012 at 11:05 am | Permalink

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

  11. Tomohiro Takahashi | December 26, 2012 at 9:53 pm | Permalink

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

    Please correct it.

  12. Tomohiro Takahashi | December 26, 2012 at 9:56 pm | Permalink

    Sorry, please ignore previous my comment.

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

  13. Tomohiro Takahashi | December 26, 2012 at 9:59 pm | Permalink

    again,
    > Inheriting Constructors
    bcc64 is NO

Bad Behavior has blocked 4 access attempts in the last 7 days.

Close