Инструменты для разработки

Visual Studio 2017 RC

Непревзойденная производительность для любого способа разработки, любого приложения и любой платформы

Visual Studio Community 2015

Бесплатная среда разработки

Visual Studio Enterprise 2015

Комплексное решение для рабочих групп

Дополнительное ПО и SDK

Выберите необходимые инструменты.

Возможности С++ 11/14/17
в Visual Studio 2015 RTM

Дата публикации: 10.09.2015

Standard Library

В таблице приведены возможности библиотеки С++14/17.

Status
Std
Paper
Title
missingC++14 N3462SFINAE-Friendly result_of
missingC++17 N4387Improving pair And tuple
missingC++17 N4508shared_mutex (Untimed)
VS2015C++14 N3302constexpr For <complex>
VS2015C++14 N3469constexpr For <chrono>
VS2015C++14 N3470constexpr For <array>
VS2015C++14 N3471constexpr For <initializer_list>, <tuple>, <utility>
VS2015C++14 N3545integral_constant::operator()()
VS2015C++14 N3642UDLs For <chrono>, <string> (1729ms, "meow"s, etc.)
VS2015C++14 N3644Null Forward Iterators
VS2015C++14 N3654quoted()
VS2015C++14 N3657Heterogeneous Associative Lookup
VS2015C++14 N3658integer_sequence
VS2015C++14 N3659shared_mutex (Timed)
VS2015C++14 N3668exchange()
VS2015C++14 N3669Fixing constexpr Member Functions Without const
VS2015C++14 N3670get<T>()
VS2015C++14 N3671Dual-Range equal(), is_permutation(), mismatch()
VS2015C++14 N3778Sized Deallocation
VS2015C++14 N3779UDLs For <complex> (3.14i, etc.)
VS2015C++14 N3789constexpr For <functional>
VS2015C++14 N3887tuple_element_t
VS2015C++14 N3891Renaming shared_mutex (Timed) To shared_timed_mutex
VS2015C++17 N3911void_t
VS2015C++17 N4089Safe Conversions In unique_ptr<T[]>
VS2015C++17 N4169invoke()
2015 opt-inC++17 N4190Removing auto_ptr, random_shuffle(), And Old <functional> Stuff
VS2015C++17 N4258noexcept Cleanups
VS2015C++17 N4259uncaught_exceptions()
VS2015C++17 N4277Trivially Copyable reference_wrapper
VS2015C++17 N4279insert_or_assign()/try_emplace() For map/unordered_map
VS2015C++17 N4280size(), empty(), data()
VS2015C++17 N4366Precisely Constraining unique_ptr Assignment
VS2015C++17 N4389bool_constant
VS2013C++14 N3346Minimal Container Element Requirements
VS2013C++14 N3421Transparent Operator Functors (less<>, etc.)
VS2013C++14 N3655Alias Templates For <type_traits> (decay_t, etc.)
VS2013C++14 N3656make_unique()
VS2013C++17 N4510Supporting Incomplete Types In vector/list/forward_list
N/AC++14 N3924Discouraging rand()
N/AC++17 N4284Contiguous 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 ( LWG2132), плюс 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

C++11 Core Language Features
VS 2013
VS 2015
Notes
Rvalue references
PartialYes 
ref-qualifiers
NoYes 
Non-static data member initializers
PartialYes 
Variadic templates
YesYes 
Initializer lists
PartialYes 
static_assert
YesYes 
auto
YesYes 
Trailing return types
YesYes 
Lambdas
YesYes 
decltype
YesYes 
Right angle brackets
YesYes 
Default template args for function templates
YesYes 
Expression SFINAE
NoNo[1]
Alias templates
YesYes 
Extern templates
YesYes 
nullptr
YesYes 
Strongly typed enums
YesYes 
Forward declared enums
YesYes 
Attributes
NoYes[RTM]
constexpr
NoYes[RTM]
Alignment
PartialYes 
Delegating constructors
YesYes 
Inheriting constructors
NoYes 
Explicit conversion operators
YesYes 
char16_t and char32_t
NoYes 
Unicode string literals
NoYes 
Raw string literals
YesYes 
Universal character names in literals
NoYes 
User-defined literals
NoYes 
Standard-layout and trivial types
YesYes 
Defaulted and deleted functions
PartialYes 
Extended friend declarations
YesYes 
Extended sizeof
NoYes 
Inline namespaces
NoYes 
Unrestricted unions
NoYes 
Local and unnamed types as template args
YesYes 
Range-based for-loop
YesYes 
override and final
YesYes 
Minimal GC support
YesYes 
noexcept
NoYes 
C++11 Core Language Features: Concurrency
VS 2013
VS 2015
Notes
Reworded sequence points
YesYes 
Atomics
YesYes 
Strong compare and exchange
YesYes 
Bidirectional fences
YesYes 
Memory model
YesYes 
Data-dependency ordering
YesYes 
Data-dependency ordering: attributes
NoYes[RTM]
exception_ptr
YesYes 
quick_exit and at_quick_exit
NoYes 
Atomics in signal handlers
YesYes 
Thread-local storage
PartialYes 
Magic statics
NoYes 
C++11 Core Language Features: C99
VS 2013
VS 2015
Notes
__func__
PartialYes 
C99 preprocessor
PartialPartial[2]
long long
YesYes 
Extended integer types
N/AN/A[3]
C++14 Core Language Features
VS 2013
VS 2015
Notes
Tweaked wording for contextual conversions
YesYes 
Binary literals
NoYes 
auto and decltype(auto) return types
NoYes 
init-captures
NoYes 
Generic lambdas
NoYes 
Variable templates
NoNo 
Extended constexpr
NoNo 
NSDMIs for aggregates
NoNo 
Avoiding/fusing allocations
N/AN/A[4]
[[deprecated]] attributes
NoYes[RTM]
Sized deallocation
NoYes 
Digit separators
NoYes 
C++1z (C++17?) Core Language Features
VS 2013
VS 2015
Notes
New rules for auto with braced-init-lists
NoYes 
Terse static_assert
NoNo 
typename in template template-parameters
NoYes 
Removing trigraphs
YesYes 
Nested namespace definitions
NoNo 
Fixing qualification conversions
NoNo 
Attributes for namespaces and enumerators
NoYes[RTM]
u8 character literals
NoYes[RTM]
Allowing more non-type template args
NoNo 
Fold expressions
NoNo 

 

[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: это очень большая «фича» с сложным взаимодействием, имплементирована на базе нового кода компилятора и потребовала очень серьезной модернизации многих компонент. Мы подозреваем что в текущем варианте есть баги и ограничения, и мы будем выпускать исправления в будущих обновлениях.

Хотим сказать большое спасибо всем, кто отправлял репорты об ошибках для промежуточных версий компилятора. Если вы найдете новые ошибки пожалуйста отправляйте их нам через MicrosoftConnect и Send A Smile/Frown.

Автор статьи: Дмитрий Андреев