Comparison of C ++ 11 support by compilers

Source: Internet
Author: User
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.

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.