Pull to refresh
0
Microsoft
Microsoft — мировой лидер в области ПО и ИТ-услуг

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

Reading time5 min
Views26K
Original author: Stephan T. Lavavej
Близится дата релиза Visual Studio 2015, и многие хотели бы узнать, как обстоят дела с поддержкой стандартов C++ в компиляторе Microsoft.


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



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


[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.
Tags:
Hubs:
Total votes 36: ↑34 and ↓2+32
Comments19

Articles

Information

Website
www.microsoft.com
Registered
Founded
Employees
Unknown
Location
США