- PVSM.RU - https://www.pvsm.ru -

Сводная таблица по поддержке C++ 11-14-17

Как любому 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      

Примечания.

  • В таблице могут быть неточности, ибо составлялась она, по большей части, вручную.
  • Не указана поддержка возможностей стандартной библиотеки (добавлю по настоятельной просьбе)
  • * означает, что есть нюансы (хотя поддержка полная). Например, опция командной строки. Читайте первоисточники.
  • No — возможность ПОКА не поддерживается;
  • N/A — возможность поддержать нельзя или вообще просто не планируется.
  • Для MSVC две колонки, поскольку много возможностей было сделано с частичной поддержкой.

Ссылки.

  1. CLang C++ 11/14/17 [87]
  2. GCC C++ 11 [88], C++ 14 [89]
  3. Актуальный на 2012 год список ссылок от Скотта Мейерса [90]
  4. MSVS 2013 C++ 11 [91], C++ 14 [92]

Автор: 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/