Difference between revisions of "多种编译器对C++11的支持"
From KlayGE
								
												
				| Gongminmin  (Talk | contribs) | Gongminmin  (Talk | contribs)  | ||
| Line 6: | Line 6: | ||
| | Rvalue references || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2118.html N2118] || '''10.0''' || '''4.3''' || '''12.0''' || '''2.9''' || Boost.Move | | Rvalue references || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2118.html N2118] || '''10.0''' || '''4.3''' || '''12.0''' || '''2.9''' || Boost.Move | ||
| |- | |- | ||
| − | | Rvalue references for *this || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2439.htm N2439] || No || '''4.8.1''' ||  | + | | Rvalue references for *this || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2439.htm N2439] || No || '''4.8.1''' || '''14.0''' || '''2.9''' || | 
| |- | |- | ||
| | Initialization of class objects by rvalues || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1610.html N1610] || '''9.0''' || '''4.3''' || '''11.1''' || '''2.9''' || | | Initialization of class objects by rvalues || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1610.html N1610] || '''9.0''' || '''4.3''' || '''11.1''' || '''2.9''' || | ||
| |- | |- | ||
| − | | Non-static data member initializers || [http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2008/n2756.htm N2756] || No || '''4.7''' ||  | + | | Non-static data member initializers || [http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2008/n2756.htm N2756] || No || '''4.7''' || '''14.0''' || '''3.0''' || | 
| |- | |- | ||
| | Variadic templates || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2242.pdf N2242] || '''Nov 12''' || '''4.3''' || '''12.1''' || '''2.9''' || | | Variadic templates || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2242.pdf N2242] || '''Nov 12''' || '''4.3''' || '''12.1''' || '''2.9''' || | ||
| Line 16: | Line 16: | ||
| | Extending variadic template template parameters || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2555.pdf N2555] || '''Nov 12''' || '''4.4''' || No || '''2.9''' ||	 | | Extending variadic template template parameters || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2555.pdf N2555] || '''Nov 12''' || '''4.4''' || No || '''2.9''' ||	 | ||
| |- | |- | ||
| − | | Initializer lists || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm N2672] || '''Nov 12''' || '''4.4''' ||  | + | | Initializer lists || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm N2672] || '''Nov 12''' || '''4.4''' || '''14.0''' || '''3.1''' || | 
| |- | |- | ||
| | Static assertions || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1720.html N1720] || '''10.0''' || '''4.3''' || '''11.1''' || '''2.9''' || Boost.StaticAssert | | Static assertions || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1720.html N1720] || '''10.0''' || '''4.3''' || '''11.1''' || '''2.9''' || Boost.StaticAssert | ||
| Line 46: | Line 46: | ||
| | Null pointer constant || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2431.pdf N2431] || '''10.0''' || '''4.6''' || '''12.1''' || '''3.0''' || 自己实现的null_ptr | | Null pointer constant || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2431.pdf N2431] || '''10.0''' || '''4.6''' || '''12.1''' || '''3.0''' || 自己实现的null_ptr | ||
| |- | |- | ||
| − | | Strongly-typed enums || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf N2347] || '''11.0''' || '''4.4''' ||  | + | | Strongly-typed enums || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf N2347] || '''11.0''' || '''4.4''' || '''14.0''' || '''2.9''' || #define | 
| |- | |- | ||
| − | | Forward declarations for enums || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2764.pdf N2764] || '''11.0''' || '''4.6''' ||  | + | | Forward declarations for enums || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2764.pdf N2764] || '''11.0''' || '''4.6''' || '''14.0''' || '''3.1''' || | 
| |- | |- | ||
| | Generalized attributes || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2761.pdf N2761] || No || '''4.8''' || '''12.1''' || '''3.3''' || | | Generalized attributes || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2761.pdf N2761] || No || '''4.8''' || '''12.1''' || '''3.3''' || | ||
| |- | |- | ||
| − | | Generalized constant expressions || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2235.pdf N2235] || No || '''4.6''' ||  | + | | Generalized constant expressions || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2235.pdf N2235] || No || '''4.6''' || '''14.0''' || '''3.1''' || | 
| |- | |- | ||
| | Alignment support || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf N2341] || No || '''4.8''' || No || '''3.3''' || | | Alignment support || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf N2341] || No || '''4.8''' || No || '''3.3''' || | ||
| |- | |- | ||
| − | | Delegating constructors || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1986.pdf N1986] || '''Nov 12''' || '''4.7''' ||  | + | | Delegating constructors || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1986.pdf N1986] || '''Nov 12''' || '''4.7''' || '''14.0''' || '''3.0''' || | 
| |- | |- | ||
| | Inheriting constructors || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2540.htm N2540] || No || '''4.8''' || No || '''3.3''' || | | Inheriting constructors || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2540.htm N2540] || No || '''4.8''' || No || '''3.3''' || | ||
| |- | |- | ||
| − | | Explicit conversion operators || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf N2437] || '''Nov 12''' || '''4.5''' ||  | + | | Explicit conversion operators || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf N2437] || '''Nov 12''' || '''4.5''' || '''14.0''' || '''3.0''' || | 
| |- | |- | ||
| − | | New character types || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2249.html N2249] || No || '''4.4''' ||  | + | | New character types || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2249.html N2249] || No || '''4.4''' || '''14.0''' || '''2.9''' || | 
| |- | |- | ||
| | Unicode string literals || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm N2442] || No || '''4.5''' || No || '''3.0''' || | | Unicode string literals || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm N2442] || No || '''4.5''' || No || '''3.0''' || | ||
| |- | |- | ||
| − | | Raw string literals || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm N2442] || '''Nov 12''' || '''4.5''' ||  | + | | Raw string literals || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm N2442] || '''Nov 12''' || '''4.5''' || '''14.0''' || '''3.0''' || | 
| |- | |- | ||
| | Universal character name literals || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2170.html N2170] || No || '''4.5''' || No || '''3.1''' || | | Universal character name literals || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2170.html N2170] || No || '''4.5''' || No || '''3.1''' || | ||
| Line 80: | Line 80: | ||
| | Extending sizeof || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2253.html N2253] || No || '''4.4''' || No || '''3.1''' || | | Extending sizeof || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2253.html N2253] || No || '''4.4''' || No || '''3.1''' || | ||
| |- | |- | ||
| − | | Inline namespaces || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2535.htm N2535] || No || '''4.4''' ||  | + | | Inline namespaces || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2535.htm N2535] || No || '''4.4''' || '''14.0''' || '''2.9''' || | 
| |- | |- | ||
| − | | Unrestricted unions || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf N2544] || No || '''4.6''' ||  | + | | Unrestricted unions || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf N2544] || No || '''4.6''' || '''14.0''' || '''3.1''' || | 
| |- | |- | ||
| | Local and unnamed types as template arguments || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2657.htm N2657] || '''9.0''' || '''4.5''' || '''12.0''' || '''2.9''' || | | Local and unnamed types as template arguments || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2657.htm N2657] || '''9.0''' || '''4.5''' || '''12.0''' || '''2.9''' || | ||
| Line 92: | Line 92: | ||
| | Minimal support for garbage collection and reachability-based leak detection || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2670.htm N2670] || '''10.0''' || No || No || No || | | Minimal support for garbage collection and reachability-based leak detection || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2670.htm N2670] || '''10.0''' || No || No || No || | ||
| |- | |- | ||
| − | | Allowing move constructors to throw [noexcept] || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3050.html N3050] || No || '''4.6''' ||  | + | | Allowing move constructors to throw [noexcept] || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3050.html N3050] || No || '''4.6''' || '''14.0''' || '''3.0''' || | 
| |- | |- | ||
| − | | Defining move special member functions || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3053.html N3053] || No || '''4.6''' ||  | + | | Defining move special member functions || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3053.html N3053] || No || '''4.6''' || '''14.0''' || '''3.0''' || | 
| |} | |} | ||
Revision as of 10:38, 20 June 2013
C++11核心语言功能
| 功能 | 提案 | MSVC | GCC | ICC | Clang | 替代方案 | 
|---|---|---|---|---|---|---|
| Rvalue references | N2118 | 10.0 | 4.3 | 12.0 | 2.9 | Boost.Move | 
| Rvalue references for *this | N2439 | No | 4.8.1 | 14.0 | 2.9 | |
| Initialization of class objects by rvalues | N1610 | 9.0 | 4.3 | 11.1 | 2.9 | |
| Non-static data member initializers | N2756 | No | 4.7 | 14.0 | 3.0 | |
| Variadic templates | N2242 | Nov 12 | 4.3 | 12.1 | 2.9 | |
| Extending variadic template template parameters | N2555 | Nov 12 | 4.4 | No | 2.9 | |
| Initializer lists | N2672 | Nov 12 | 4.4 | 14.0 | 3.1 | |
| Static assertions | N1720 | 10.0 | 4.3 | 11.1 | 2.9 | Boost.StaticAssert | 
| auto-typed variables | N1984 | 10.0 | 4.4 | 12.0 | 2.9 | Boost.Typeof | 
| Multi-declarator auto | N1737 | 10.0 | 4.4 | 12.0 | 2.9 | Boost.Typeof | 
| Removal of auto as a storage-class specifier | N2546 | 10.0 | 4.4 | 12.0 | 2.9 | Boost.Typeof | 
| New function declarator syntax | N2541 | 10.0 | 4.4 | 12.0 | 2.9 | Boost.ReturnType | 
| New wording for C++11 lambdas | N2927 | 10.0 | 4.5 | 12.0 | 3.1 | Boost.Lambda | 
| Declared type of an expression | N2343 | 10.0 | 4.3 | 12.0 | 2.9 | Boost.Typeof | 
| Incomplete return types | N3276 | 11.0 | 4.8.1 | 12.1 | 3.1 | |
| Right angle brackets | N1757 | 9.0 | 4.3 | 11.1 | 2.9 | TR1 | 
| Default template arguments for function templates | DR226 | Nov 12 | 4.3 | 12.1 | 2.9 | |
| Solving the SFINAE problem for expressions | DR339 | No | 4.4 | 12.1 | 2.9 | |
| Template aliases | N2258 | No | 4.7 | 12.1 | 3.0 | |
| Extern templates | N1987 | 9.0 | 4.3 | 11.1 | 2.9 | |
| Null pointer constant | N2431 | 10.0 | 4.6 | 12.1 | 3.0 | 自己实现的null_ptr | 
| Strongly-typed enums | N2347 | 11.0 | 4.4 | 14.0 | 2.9 | #define | 
| Forward declarations for enums | N2764 | 11.0 | 4.6 | 14.0 | 3.1 | |
| Generalized attributes | N2761 | No | 4.8 | 12.1 | 3.3 | |
| Generalized constant expressions | N2235 | No | 4.6 | 14.0 | 3.1 | |
| Alignment support | N2341 | No | 4.8 | No | 3.3 | |
| Delegating constructors | N1986 | Nov 12 | 4.7 | 14.0 | 3.0 | |
| Inheriting constructors | N2540 | No | 4.8 | No | 3.3 | |
| Explicit conversion operators | N2437 | Nov 12 | 4.5 | 14.0 | 3.0 | |
| New character types | N2249 | No | 4.4 | 14.0 | 2.9 | |
| Unicode string literals | N2442 | No | 4.5 | No | 3.0 | |
| Raw string literals | N2442 | Nov 12 | 4.5 | 14.0 | 3.0 | |
| Universal character name literals | N2170 | No | 4.5 | No | 3.1 | |
| User-defined literals | N2765 | No | 4.7 | No | 3.1 | |
| Standard Layout Types | N2342 | 11.0 | 4.5 | No | 3.0 | |
| Defaulted and deleted functions | N2346 | No | 4.4 | 12.0 | 3.0 | |
| Extended friend declarations | N1791 | 10.0 | 4.7 | 12.0 | 2.9 | |
| Extending sizeof | N2253 | No | 4.4 | No | 3.1 | |
| Inline namespaces | N2535 | No | 4.4 | 14.0 | 2.9 | |
| Unrestricted unions | N2544 | No | 4.6 | 14.0 | 3.1 | |
| Local and unnamed types as template arguments | N2657 | 9.0 | 4.5 | 12.0 | 2.9 | |
| Range-based for | N2930 | 11.0 | 4.6 | 13.0 | 3.0 | Boost.Foreach | 
| Explicit virtual overrides | N2928 | 11.0 | 4.7 | No | 3.0 | #define | 
| Minimal support for garbage collection and reachability-based leak detection | N2670 | 10.0 | No | No | No | |
| Allowing move constructors to throw [noexcept] | N3050 | No | 4.6 | 14.0 | 3.0 | |
| Defining move special member functions | N3053 | No | 4.6 | 14.0 | 3.0 | 
C++11核心语言功能:并行
| 功能 | 提案 | MSVC | GCC | ICC | Clang | 替代方案 | 
|---|---|---|---|---|---|---|
| Sequence points | N2239 | No | No | No | 3.3 | |
| Atomic operations | N2427 | 11.0 | 4.4 | 13.0 | 3.1 | Boost.Atomic | 
| Strong Compare and Exchange | N2748 | 11.0 | No | No | 3.1 | |
| Bidirectional Fences | N2752 | 11.0 | No | No | 3.1 | |
| Memory model | N2429 | No | No | No | 3.2 | |
| Data-dependency ordering: atomics and memory model | N2664 | 11.0 | No | No | No | |
| Propagating exceptions | N2179 | 10.0 | 4.4 | 12.0 | 2.9 | Boost.Exception | 
| Abandoning a process and at_quick_exit | N2440 | No | No | No | No | |
| Allow atomics use in signal handlers | N2547 | No | No | No | 3.1 | |
| Thread-local storage | N2659 | No | 4.8 | No | 3.3 | Boost.Thread | 
| Dynamic initialization and destruction with concurrency | N2660 | No | No | No | No | 
C++11核心语言功能:C99
| 功能 | 提案 | MSVC | GCC | ICC | Clang | 替代方案 | 
|---|---|---|---|---|---|---|
| __func__ predefined identifier | N2340 | No | 4.3 | 11.1 | 2.9 | __FUNCTION__ | 
| C99 preprocessor | N1653 | No | 4.3 | 11.1 | 2.9 | |
| long long | N1811 | 9.0 | 4.3 | 11.1 | 2.9 | __int64 | 
| Extended integral types | N1988 | No | No | No | No | 
