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++0x / C++11 support in GCC - http://gcc.gnu.org/projects/cxx0x.html
- C++98 / C++11 support in Clang - http://clang.llvm.org/cxx_status.html
- C++11 features in MS Visual C++ 11 - http://blogs.msdn.com/b/vcblog/archive/2011/09/12/10209291.aspx
- C++0x support in bcc32 and bccosx - http://docwiki.embarcadero.com/RADStudio/XE3/en/C%2B%2B0x_Features_Index
- C++11 support in bcc64 - http://docwiki.embarcadero.com/RADStudio/XE3/en/C%2B%2B11_Features_(BCC64)
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
David-san
> Raw string literals
bcc64 is YES
auto-typed variables is not supported by CBuilder32
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
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.
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.
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.
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.
Davis-san
> Template aliases (Template Type Aliases, Alias templates)
bcc64 is YES
David-san
> Allowing move constructors to throw [noexcept]
bcc64 is YES
Takahashi-san - thanks again for the update comments. I will update the table. You are the best!
David-san
> Delegating Constructors
bcc64(clang3.1) is NO
Please correct it.
Sorry, please ignore previous my comment.
With bcc64(clang3.1)
> Delegating Constructors Yes Inheriting Constructors Yes <—- incorrect, bcc64(clang3.1) is NO
again,
> Inheriting Constructors
bcc64 is NO
Post a Comment