Document directory
- C ++ 11 core language features
- C ++ 11 core language features: concurrency
- C ++ 11 Library
Reprinted please indicate the source for the klayge game engine, the permanent link of this article is http://www.klayge.org /? P = 2154
After klayge introduced the C ++ 11 feature for the first time, I investigated the support of a mainstream compiler for C ++ 11, to add more C ++ 11 elements in the next version. Here, we also list the alternatives that can be used when they are not supported. Mainly refer to C ++ 11 features in Visual C ++ 11, status of experimental C ++ 0x support in GCC 4.6, status of experimental C ++ 0x support in GCC 4.7, boost.
C ++ 11 core language features
| |
VC 10 |
VC 11 |
GCC 4.6 |
GCC 4.7 |
Alternative |
| Rvalue references |
Yes |
Yes |
Yes |
Yes |
Boost. Move |
| Rvalue references for * This |
No |
No |
No |
No |
|
| Non-static data member initializers |
No |
No |
No |
Yes |
|
| Variadic templates |
No |
No |
Yes |
Yes |
|
| Initializer lists |
No |
No |
Yes |
Yes |
|
| Static_assert |
Yes |
Yes |
Yes |
Yes |
Boost. Static assert |
| Auto |
Yes |
Yes |
Yes |
Yes |
Boost. typeof |
| Trailing return types |
Yes |
Yes |
Yes |
Yes |
Boost. returntype |
| Lambdas |
Yes |
Yes |
Yes |
Yes |
Boost. Lambda |
| Decltype |
Yes |
Yes |
Yes |
Yes |
Boost. typeof |
| Right Angle brackets |
Yes |
Yes |
Yes |
Yes |
Tr1 |
| Default template arguments for function templates |
No |
No |
Yes |
Yes |
|
| Expression sfinae |
No |
No |
Yes |
Yes |
|
| Alias templates |
No |
No |
No |
Yes |
|
| Extern templates |
Yes |
Yes |
Yes |
Yes |
|
| Nullptr |
Yes |
Yes |
Yes |
Yes |
Self-implemented null_ptr |
| Stronugly typed enums |
No |
Yes |
Yes |
Yes |
# Define |
| Forward declared enums |
No |
Yes |
Yes |
Yes |
|
| Attributes |
No |
No |
No |
No |
|
| Constexpr |
No |
No |
Yes |
Yes |
|
| Alignment |
No |
No |
No |
No |
|
| Delegating Constructors |
No |
No |
No |
Yes |
|
| Inheriting Constructors |
No |
No |
No |
No |
|
| Explicit conversion Operators |
No |
No |
Yes |
Yes |
|
| Char16_t and char32_t |
No |
No |
Yes |
Yes |
|
| Unicode string literals |
No |
No |
Yes |
Yes |
|
| Raw string literals |
No |
No |
Yes |
Yes |
|
| Universal character names in literals |
No |
No |
Yes |
Yes |
|
| User-Defined literals |
No |
No |
No |
Yes |
|
| Standard-layout and trivial types |
No |
Yes |
Yes |
Yes |
|
| Defaulted and deleted Functions |
No |
No |
Yes |
Yes |
|
| Extended friend declarations |
Yes |
Yes |
No |
Yes |
|
| Extended sizeof |
No |
No |
No |
Yes |
|
| Inline namespaces |
No |
No |
Yes |
Yes |
|
| Unrestricted unions |
No |
No |
Yes |
Yes |
|
| Local and unnamed types as template arguments |
Yes |
Yes |
Yes |
Yes |
|
| Range-based for-Loop |
No |
Yes |
Yes |
Yes |
Boost. foreach |
| Override and final |
No |
Yes |
No |
Yes |
# Define |
| Minimal GC support |
Yes |
Yes |
No |
No |
|
| Notest |
No |
No |
Yes |
Yes |
|
C ++ 11 core language features: concurrency
| |
VC 10 |
VC 11 |
GCC 4.6 |
GCC 4.7 |
Alternative |
| Reworded sequence points |
No |
No |
No |
No |
|
| Atomics |
No |
Yes |
No |
Yes |
Boost. Atomic |
| Strong compare and exchange |
No |
Yes |
No |
No |
|
| Bidirectional fences |
No |
Yes |
No |
No |
|
| Memory Model |
No |
No |
No |
No |
|
| Data-dependency Ordering |
No |
Yes |
No |
No |
|
| Data-dependency Ordering: function Annotation |
No |
No |
No |
No |
|
| Prediction_ptr |
Yes |
Yes |
Yes |
Yes |
Boost. Exception |
| Quick_exit and at_quick_exit |
No |
No |
No |
No |
|
| Atomics in signal handlers |
No |
No |
No |
No |
|
| Thread-Local Storage |
No |
No |
No |
No |
Boost. Thread |
| Magic statics |
No |
No |
No |
No |
|
C ++ 11 core language features: c99
| |
VC 10 |
VC 11 |
GCC 4.6 |
GCC 4.7 |
Alternative |
| _ FUNC __ |
No |
No |
Yes |
Yes |
_ Function __ |
| C99 Preprocessor |
No |
No |
Yes |
Yes |
|
| Long long |
Yes |
Yes |
Yes |
Yes |
_ Int64 |
| Extended integer types |
No |
No |
No |
No |
|
C ++ 11 Library
| |
VC 10 |
VC 11 |
GCC 4.6 |
GCC 4.7 |
Alternative |
| Shared_ptr, weak_ptr |
Yes |
Yes |
Yes |
Yes |
Boost. smartptr |
| Make _/allocate_shared, owner_before |
Yes |
Yes |
Yes |
Yes |
Boost. smartptr |
| Unique_ptr |
Yes |
Yes |
Yes |
Yes |
Boost. interprocess |
| Fixed-size arrays |
Yes |
Yes |
Yes |
Yes |
Boost. Arrays |
| Hash Tables |
Yes |
Yes |
Yes |
Yes |
Boost. unordered |
| Singly-linked list |
Yes |
Yes |
Yes |
Yes |
Boost. Container |
| Regular Expressions |
Yes |
Yes |
Yes |
Yes |
Boost. RegEx |
| Tuple |
Yes |
Yes |
Yes |
Yes |
Boost. tuple |
| Random Numbers & Distributions |
Yes |
Yes |
Yes |
Yes |
Boost. Random |
| Type Traits |
Yes |
Yes |
Yes |
Yes |
Boost. typetraits |
| Generalized function pointers |
Yes |
Yes |
Yes |
Yes |
Boost. Function |
| Generalized Binders |
Yes |
Yes |
Yes |
Yes |
Boost. Bind |
| Generalized member function adapters |
Yes |
Yes |
Yes |
Yes |
Boost. Bind |
| Reference wrappers |
Yes |
Yes |
Yes |
Yes |
Boost. Ref |
| Return type Calculation |
Yes |
Yes |
Yes |
Yes |
Boost. returntype |
| New Algorithms |
Yes |
Yes |
Yes |
Yes |
Boost. Algorithm |
| Time |
No |
No |
Yes |
Yes |
Boost. chrono |
Here, the "yes" in italic indicates that both VC 11 and GCC 4.7 are supported, and there are non-C ++ 11 alternatives, so it is likely to be used in the next version of klayge. From the table above, we can see that the support for libraries is quite good. Even if the compiler does not support it, it can be easily replaced with boost. The language core is far from perfect, but the most common basics have been covered. Some feature, such as foreach and auto, are supported by boost at the library level, which has a great impact on the Compilation speed. C ++ 11 should greatly improve the compilation performance if it is supported at the core language level.