- PVSM.RU - https://www.pvsm.ru -
Как любому C++ разработчику, следящему за новинками в отрасли и стандартами в частности, мне стало интересно, насколько полно вообще поддерживается стандарт C++ 11 (а также 1y и 1z) разными компиляторами? Да, существуют разные сводные таблицы, но чаще всего это сравнение двух компиляторов или двух версий одного компилятора, либо сводная таблица, но уже устаревшая, либо вообще неполный список. В общем, сел я да и сделал полную таблицу (на основе списка Clang-a и GCC) по четырем компиляторам: Clang, GNU C++, MSVC и Intel C++.
Внимание! Данная таблица прежде всего предназначена для тех, кто пишет свой продукт. Если Вы разрабатываете библиотеку, то, естественно, лучше ознакомиться с особенностями поддержки в первоисточнике (а еще лучше на все тесты написать). Для меня она прежде всего нужда для решений вроде «О! Range-for можно уже использовать без проблем.».
| Часть стандарта | C++11 Proposal | Clang | GCC | VC Частично | VC Полно | Intel C++ |
|---|---|---|---|---|---|---|
| C++ 11 | ||||||
| Rvalue references | N2118 [1] | 2.9 | 4.3 | 10.0 | 13.0 | 12.0 |
| Rvalue references for *this | N2439 [2] | 2.9 | 4.8.1 | 13.0 | ||
| Initialization of class objects by rvalues | N1610 [3] | 2.9 | 4.0 | |||
| Non-static data member initializers | N2756 [4] | 3.0 | 4.7 | 12.0 | ||
| Variadic templates | N2242 [5] | 2.9 | 4.3 | 11.1 | ||
| Extending variadic template template parameters | N2555 [6] | 2.9 | 4.4 | 12.0 | ||
| Initializer lists | N2672 [7] | 3.1 | 4.4 | 11.1 | 13.0 | |
| Static assertions | N1720 [8] | 2.9 | 4.3 | 10.0 | 11.0 | |
| auto-typed variables | N1984 [9] | 2.9 | 4.4 | 10.0 | 11.0 | |
| Multi-declarator auto | N1737 [10] | 2.9 | 4.4 | 10.0 | ||
| Removal of auto as a storage-class specifier | N2546 [11] | 2.9 | 4.4 | 10.0 | ||
| New function declarator syntax | N2541 [12] | 2.9 | 4.4 | 10.0 | 12.1 | |
| Lambda expressions | N2927 [13] | 3.1 | 4.5 | 10.0 | 11.0 | 12.0 |
| Declared type of an expression | N2343 [14] | 2.9 | 4.3 | 10.0 | 11.0 | 11.0 |
| Incomplete return types | N3276 [15] | 3.1 | 4.8.1 | 12.0 | ||
| Right angle brackets | N1757 [16] | 2.9 | 4.3 | 10.0 | 11.0 | |
| Default template arguments for function templates | DR226 [17] | 2.9 | 4.3 | 12.0 | ||
| Solving the SFINAE problem for expressions | DR339 [18] | 2.9 | 4.4 | |||
| Alias templates | N2258 [19] | 3.0 | 4.7 | 12.0 | 12.1 | |
| Extern templates | N1987 [20] | 2.9 | 4.0 | 10.0 | 9.0 | |
| Null pointer constant | N2431 [21] | 3.0 | 4.6 | 10.0 | 12.1* | |
| Strongly-typed enums | N2347 [22] | 2.9 | 4.4 | 10.0 | 11.0 | 12.0 |
| Forward declarations for enums | N2764 [23] DR1206 [24] | 3.1 | 4.6 | 11.0 | ||
| Standardized attribute syntax | N2761 [25] | 3.3* | 4.8 | 12.1 | ||
| Generalized constant expressions | N2235 [26] | 3.1 | 4.6 | 13.0 | 13.0 | |
| Alignment support | N2341 [27] | 3.3 | 4.8 | 10.0 | 13.0 | |
| Conditionally-support behavior | N1627 [28] | 2.9 | ||||
| Changing undefined behavior into diagnosable errors | N1727 [29] | 2.9 | 11.1 | |||
| Delegating constructors | N1986 [30] | 3.0 | 4.7 | 12.0 | ||
| Inheriting constructors | N2540 [31] | 3.3 | 4.8 | 13.0 | ||
| Explicit conversion operators | N2437 [32] | 3.0 | 4.5 | 11.1 | 13.0 | |
| New character types | N2249 [33] | 2.9 | 4.4 | 13.0 | ||
| Unicode string literals | N2442 [34] | 3.0 | 4.5 | 13.0 | 11.0* | |
| Raw string literals | N2442 [34] | 3.0 | 4.5 | 11.1 | ||
| Universal character names in literals | N2170 [35] | 3.1 | 4.5 | |||
| User-defined literals | N2765 [36] | 3.1 | 4.7 | 13.0 | ||
| Standard Layout Types | N2342 [37] | 3.0 | 4.4 | 11.0 | ||
| Defaulted functions | N2346 [38] | 3.0 | 4.4 | 12.0 | 12.0 | |
| Deleted functions | N2346 [38] | 2.9 | 4.4 | 12.0 | 12.0 | |
| Extended friend declarations | N1791 [39] | 2.9 | 4.7 | 10.0 | 11.0 | |
| Extending sizeof | N2253 [40] DR850 [41] | 3.1 | 4.4 | 13.0 | ||
| Inline namespaces | N2535 [42] | 2.9 | 4.4 | 13.0 | ||
| Unrestricted unions | N2544 [43] | 3.1 | 4.6 | 13.0 | ||
| Local and unnamed types as template arguments | N2657 [44] | 2.9 | 4.5 | 10.0 | 12.0 | |
| Range-based for | N2930 [45] | 3.0 | 4.6 | 11.0 | 13.0 | |
| Explicit virtual overrides | N2928 [46] N3206 [47] N3272 [48] | 3.0 | 4.7 | 10.0 | 11.0 | 12.0* |
| Minimal support for garbage collection and reachability-based leak detection | N2670 [49] | N/A | N/A | 10.0 | ||
| Allowing move constructors to throw [noexcept] | N3050 [50] | 3.0 | 4.6 | 13.0 | ||
| Defining move special member functions | N3053 [51] | 3.0 | 4.6 | |||
| Concurrency | ||||||
| Sequence points | N2239 [52] | 3.3 | 4.0 | N/A | N/A | |
| Atomic operations | N2427 [53] | 3.1 | 4.4 | 11.0 | 13.0 | |
| Strong Compare and Exchange | N2748 [54] | 3.1* | 4.5 | 11.0 | ||
| Bidirectional Fences | N2752 [55] | 3.1 | 4.8 | 11.0 | ||
| Memory model | N2429 [56] | 3.2 | 4.8 | N/A | N/A | |
| Data-dependency ordering: atomics and memory model | N2664 [57] | 3.2* | 4.4 | 11.0 | ||
| Propagating exceptions | N2179 [58] | 2.9 | 4.4 | 10.0 | ||
| Abandoning a process and at_quick_exit | N2440 [59] | 4.8 | 13.0 | |||
| Allow atomics use in signal handlers | N2547 [60] | 3.1 | 4.0 | |||
| Thread-local storage | N2659 [61] | 3.3 | 4.8 | 10.0 | 13.0 | |
| Dynamic initialization and destruction with concurrency | N2660 [62] | 2.9 | 4.3 | 13.0 | ||
| C99 Features in C++11 | ||||||
| __func__ predefined identifier | N2340 [63] | 2.9 | 4.3 | 10.0 | 13.0 | |
| C99 preprocessor | N1653 [64] | 2.9 | 4.3 | 10.0 | 11.1 | |
| long long | N1811 [65] | 2.9 | 4.3 | 10.0 | 9.0 | |
| Extended integral types | N1988 [66] | N/A | 4.0 | N/A | N/A | |
| C++14 | ||||||
| Tweak to certain C++ contextual conversions | N3323 [67] | 3.4 | 4.9 | 12.0 | ||
| Binary literals | N3472 [68] | 2.9 | 4.9 | 13.0 | ||
| decltype(auto) | N3638 [69] | 3.3 | 4.8 | 13.0 | ||
| Return type deduction for normal functions | 3.4 | 4.9 | 13.0 | |||
| Initialized lambda captures | N3648 [70] | 3.4 | 4.9 | 13.0 | ||
| Generic lambdas | N3649 [71] | 3.4 | 4.9 | 13.0 | ||
| Variable templates | N3651 [72] | 3.4 | 5.0 | |||
| Relaxing requirements on constexpr functions | N3652 [73] | 3.4 | 5.0 | |||
| Member initializers and aggregates | N3653 [74] | 3.3 | 5.0 | |||
| Clarifying memory allocation | N3664 [75] | 3.4 | N/A | |||
| [[deprecated]] attribute | N3760 [76] | 3.4 | 4.9 | |||
| Single quotation mark as digit separator | N3781 [77] | 3.4 | 4.9 | 13.0 | ||
| C++ Sized Deallocation | N3778 [78] | 3.4 | No | 13.0 | ||
| C++ 1z | ||||||
| static_assert with no message | N3928 [79] | 3.5 | ||||
| Disabling trigraph expansion by default | N4086 [80] | 3.5 | 13.0 | |||
| typename in a template template parameter | N4051 [81] | 3.5 | ||||
| New auto rules for direct-list-initialization | N3922 [82] | No | ||||
| Fold expressions | N4295 | SVN | ||||
| u8 character literals | N4267 | SVN | ||||
| Nested namespace definition | N4230 | SVN | ||||
| Attributes for namespaces and enumerators | N4266 | SVN | ||||
| Allow constant evaluation for all non-type template arguments | N4268 | SVN | ||||
| Черновики (Drafts) | ||||||
| SD-6: SG10 feature test recommendations | SD-6 [83] | 3.4 | ||||
| SVN | ||||||
| [DRAFT TS] Array extensions (arrays of runtime bound) | N3820 [84] | No | 4.9 | |||
| [DRAFT TS] Library fundamentals (invocation type traits) | N3908 [85] | No | ||||
| [DRAFT TS] Concepts | N3929 [86] | No | GCC Concepts | |||
Примечания.
Ссылки.
Автор: mapron
Источник [93]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/c-3/76506
Ссылки в тексте:
[1] N2118: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2118.html
[2] N2439: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2439.htm
[3] N1610: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1610.html
[4] N2756: http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2008/n2756.htm
[5] N2242: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2242.pdf
[6] N2555: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2555.pdf
[7] N2672: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm
[8] N1720: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1720.html
[9] N1984: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1984.pdf
[10] N1737: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1737.pdf
[11] N2546: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2546.htm
[12] N2541: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2541.htm
[13] N2927: http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2927.pdf
[14] N2343: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2343.pdf
[15] N3276: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3276.pdf
[16] N1757: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1757.html
[17] DR226: http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#226
[18] DR339: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2634.html
[19] N2258: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf
[20] N1987: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1987.htm
[21] N2431: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2431.pdf
[22] N2347: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf
[23] N2764: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2764.pdf
[24] DR1206: http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1206
[25] N2761: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2761.pdf
[26] N2235: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2235.pdf
[27] N2341: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf
[28] N1627: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1627.pdf
[29] N1727: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1727.pdf
[30] N1986: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1986.pdf
[31] N2540: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2540.htm
[32] N2437: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf
[33] N2249: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2249.html
[34] N2442: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm
[35] N2170: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2170.html
[36] N2765: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2765.pdf
[37] N2342: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2342.htm
[38] N2346: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2346.htm
[39] N1791: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1791.pdf
[40] N2253: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2253.html
[41] DR850: http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#850
[42] N2535: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2535.htm
[43] N2544: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf
[44] N2657: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2657.htm
[45] N2930: http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2930.html
[46] N2928: http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2928.htm
[47] N3206: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3206.htm
[48] N3272: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3272.htm
[49] N2670: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2670.htm
[50] N3050: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3050.html
[51] N3053: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3053.html
[52] N2239: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html
[53] N2427: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2427.html
[54] N2748: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2748.html
[55] N2752: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2752.htm
[56] N2429: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2429.htm
[57] N2664: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2664.htm
[58] N2179: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2179.html
[59] N2440: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2440.htm
[60] N2547: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2547.htm
[61] N2659: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2659.htm
[62] N2660: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2660.htm
[63] N2340: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2340.htm
[64] N1653: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1653.htm
[65] N1811: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1811.pdf
[66] N1988: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1988.pdf
[67] N3323: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3323.pdf
[68] N3472: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3472.pdf
[69] N3638: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3638.html
[70] N3648: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3648.html
[71] N3649: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3649.html
[72] N3651: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3651.pdf
[73] N3652: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3652.html
[74] N3653: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3653.html
[75] N3664: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3664.html
[76] N3760: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3760.html
[77] N3781: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3781.pdf
[78] N3778: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3778.html
[79] N3928: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3928.pdf
[80] N4086: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4086.html
[81] N4051: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4051.html
[82] N3922: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3922.html
[83] SD-6: http://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations
[84] N3820: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3820.html
[85] N3908: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3908.html
[86] N3929: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3929.pdf
[87] C++ 11/14/17: http://clang.llvm.org/cxx_status.html
[88] C++ 11: https://gcc.gnu.org/projects/cxx1x.html
[89] C++ 14: https://gcc.gnu.org/projects/cxx1y.html
[90] Скотта Мейерса: http://www.aristeia.com/C++11/C++11FeatureAvailability.htm
[91] C++ 11: http://msdn.microsoft.com/en-us/library/hh567368.aspx
[92] C++ 14: http://blogs.msdn.com/b/vcblog/archive/2014/11/17/c-11-14-17-features-in-vs-2015-preview.asp
[93] Источник: http://habrahabr.ru/post/245175/
Нажмите здесь для печати.