
Standard Library
В таблице приведены возможности библиотеки С++14/17, за которые мы голосовали в мае.
Status |
Std |
Paper |
Title |
missing |
C++14 | N3462 | SFINAE-Friendly result_of |
missing |
C++17 |
N4387 |
Improving pair And tuple |
missing |
C++17 |
N4508 |
shared_mutex (Untimed) |
VS2015 |
C++14 |
N3302 |
constexpr For <complex> |
VS2015 |
C++14 |
N3469 |
constexpr For <chrono> |
VS2015 |
C++14 |
N3470 |
constexpr For <array> |
VS2015 |
C++14 |
N3471 |
constexpr For <initializer_list>, <tuple>, <utility> |
VS2015 |
C++14 |
N3545 |
integral_constant::operator()() |
VS2015 |
C++14 |
N3642 |
UDLs For <chrono>, <string> (1729ms, "meow"s, etc.) |
VS2015 |
C++14 |
N3644 |
Null Forward Iterators |
VS2015 |
C++14 |
N3654 |
quoted() |
VS2015 |
C++14 |
N3657 |
Heterogeneous Associative Lookup |
VS2015 |
C++14 |
N3658 |
integer_sequence |
VS2015 |
C++14 |
N3659 |
shared_mutex (Timed) |
VS2015 |
C++14 |
N3668 |
exchange() |
VS2015 |
C++14 |
N3669 |
Fixing constexpr Member Functions Without const |
VS2015 |
C++14 |
N3670 |
get<T>() |
VS2015 |
C++14 |
N3671 |
Dual-Range equal(), is_permutation(), mismatch() |
VS2015 |
C++14 |
N3778 |
Sized Deallocation |
VS2015 |
C++14 |
N3779 |
UDLs For <complex> (3.14i, etc.) |
VS2015 |
C++14 |
N3789 |
constexpr For <functional> |
VS2015 |
C++14 |
N3887 |
tuple_element_t |
VS2015 |
C++14 |
N3891 |
Renaming shared_mutex (Timed) To shared_timed_mutex |
VS2015 |
C++17 |
N3911 |
void_t |
VS2015 |
C++17 |
N4089 |
Safe Conversions In unique_ptr<T[]> |
VS2015 |
C++17 |
N4169 |
invoke() |
2015 opt-in |
C++17 |
N4190 |
Removing auto_ptr, random_shuffle(), And Old <functional> Stuff |
VS2015 |
C++17 |
N4258 |
noexcept Cleanups |
VS2015 |
C++17 |
N4259 |
uncaught_exceptions() |
VS2015 |
C++17 |
N4277 |
Trivially Copyable reference_wrapper |
VS2015 |
C++17 |
N4279 |
insert_or_assign()/try_emplace() For map/unordered_map |
VS2015 |
C++17 |
N4280 |
size(), empty(), data() |
VS2015 |
C++17 |
N4366 |
Precisely Constraining unique_ptr Assignment |
VS2015 |
C++17 |
N4389 |
bool_constant |
VS2013 |
C++14 |
N3346 |
Minimal Container Element Requirements |
VS2013 |
C++14 |
N3421 |
Transparent Operator Functors (less<>, etc.) |
VS2013 |
C++14 |
N3655 |
Alias Templates For <type_traits> (decay_t, etc.) |
VS2013 |
C++14 |
N3656 |
make_unique() |
VS2013 |
C++17 |
N4510 |
Supporting Incomplete Types In vector/list/forward_list |
N/A |
C++14 |
N3924 |
Discouraging rand() |
N/A |
C++17 |
N4284 |
Contiguous Iterators |
2015 opt-in означает что существует защитное макро. По умолчанию работает auto ptr/etc. Если вы определите _HAS_AUTO_PTR_ETC в 0 на уровне проекта (через командный параметр или проектный файл), то auto ptr/etc не предоставляется. В дальнейшем предусматривается opt-out, а через релиз auto ptr/etc будет убран совсем.
«N/A» означает что эти возможности вносят изменения в формулировки стандарта, но никак не затрагивают имплементоров или пользователей.
Имплементация стандартной библиотеки C99 готова, кроме tgmath.h (что иррелевантно к C++) и макросов-прагм CX_LIMITED_RANGE/FP_CONTRACT.
Имплементация стандартной C++11 библиотеки готова.
Имплементация стандартной C++14 библиотеки готова, за исключением Expression SFINAE в результате (N3462) и std::function (LWG 2132), плюс 11 открытых Library Issues.
Имплементация стандартной C++17 библиотеки готова, за исключением улучшений в pair/tuple (N4387) и untimed shared_mutex (N4508), плюс 10 открытых Library Issues.
Все оставшиеся исключения являются багами. (На текущий момент мы исправили около 160 багов в STL между 2013 и 2015 релизами. Год назад, был предоставлен список первых наборов исправлений.
(C99) offsetof
(C++11) numeric_limits<float/double/long>
double>::quiet_NaN()/signaling_NaN()
(C++11) mutex's default constructor
(C++14) error_category's default constructor
(C++14) min()/max()/minmax() for initializer_list
(C++17) min_element()/max_element()/minmax_element()
На данный момент команда сфокусирована на получении полного соответствия стандарту, что является более высоким по приоритету нежели имплементация технических спецификаций, утверждаемых комитетом. (мы думаем что ТС’ы важны, но стандарт еще важнее) Тем не менее мы уже имплементировали несколько ТС возможностей: Filesystem «V3» TS (N4100) и Uniform Container Erasure (N4529 [container.erasure]).
Core Language
[RTM] Эти возможности имплементированы между RC и RTM.
[1] Мы планируем приступить к имплементации Expression SFINAE в компиляторе сразу после 2015 RTM, и планируем выпустить в свет в обновлении. Но возможно это не получится в 2015 Update 1.
[2] Поддержка препроцессора C99 осталась без изменений. Частичный статус остался в силе так как несмотря на то что компилятор поддерживает variadic макросы, поведение препроцессора не соответствует стандарту C99/C++11 во многих вещах.
[3] «Extended integer types» находятся в списке Not Applicable по причине того, что стандарт не требует поддержки типов длиннее long long. Мы препочли не поддерживать такие типы, что является разрешенным поведением. GCC и Clang тоже не имплементировали эти типы.
[4] «Avoiding/fusing allocations» находится в списке Not Applicable по причине того, что стандарт позволяет, но не требует такой оптимизации. Пока принято решение не имплементировать эту возможность, что является разрешенным поведением.
Замечание в части C++11 constexpr: это очень большая «фича» с сложным взаимодействием, имплементирована на базе нового кода компилятора и потребовала очень серьезной модернизации многих компонент. Мы подозреваем что в текущем варианте есть баги и ограничения, и мы будем выпускать исправления в будущих обновлениях.
Хотим сказать большое спасибо всем, кто отправлял репорты об ошибках для промежуточных версий компилятора. Если вы найдете новые ошибки пожалуйста отправляйте их нам через Microsoft Connect и Send A Smile/Frown.