Funzionalità di C++14/17 e correzioni STL nell'anteprima di VS "15" 5

Funzionalità di C++14/17 e correzioni STL nell'anteprima di VS "15" 5

Visual Studio "15" Preview 5 è ora disponibile. (Come spiegato nel nostro registro delle modifiche precedente, VS "15" è un numero di versione IDE, non un anno.  È la prossima versione principale dopo VS 2015, che era la versione IDE 14.  VS ha numeri diversi per il marchio dell'anno, la versione IDE e C++ versione del compilatore.)

L'anteprima 5 aggiunge il supporto per constexpr esteso C++14, supporto incondizionato per range-for generalizzato (è una modifica C++17 determinata per correggere un difetto in C++14) e supporto per static_assert conciso di C++17 , shared_ptr::weak_type, e . Come al solito, abbiamo corretto molti bug del compilatore e della libreria e abbiamo risolto altri 10 problemi della libreria.

Inoltre, il VS "15" Release Candidate aggiungerà il supporto per , , apply() e make_from_tuple() di C++17. Conterrà anche un'importante revisione di std::vector per correttezza e prestazioni. Mentre stiamo ancora lavorando per rilasciare VS "15" RC, puoi provare subito le nostre build di set di strumenti giornalieri. Segnala eventuali bug che trovi, in Anteprima 5 o nelle build giornaliere del set di strumenti.

Funzioni del compilatore

Caratteristiche principali del linguaggio C++03/11

VS “15”

Note

[Tutto il resto]

[A]

Ricerca del nome in due fasi

No

 

Espressione SFINAE

Parziale

[B]

Preprocessore C99

Parziale

[C]

Tipi interi estesi

N/A

[D]

Caratteristiche principali del linguaggio C++14

VS “15”

Note

Evitare/fondere allocazioni

N/A

[E]

Formulazione ottimizzata per le conversioni contestuali

 

Letterali binari

 

tipi restituiti auto e decltype(auto)

 

init-captures

 

Lambda generici

 

Modelli di variabili

 

Constexpr esteso

[P5]

NSDMI per aggregati

[P4]

[[obsoleto]] attributo

 

Deallocation di dimensioni

 

Separatori di cifre

 

Caratteristiche principali del linguaggio C++17

VS “15”

Note

Nuove regole per auto con elenchi di init rinforzati

 

Conciso static_assert

[P5] [*]

typename in template template-parameters

 

Rimozione dei trigrafi

 

Definizioni nidificate dello spazio dei nomi

[*]

Correzione delle conversioni di qualifica

No

 

Attributi per namespace ed enumeratori

 

u8 caratteri letterali

 

Consentire più argomenti di modello non di tipo

No

 

Piega le espressioni

No

 

Rimozione di alcune pieghe unarie vuote

No

 

Rimozione della parola chiave register

No

 

Rimozione di operator++ per bool

No

 

Aggiunta di nessunextra al sistema di tipi

No

 

Inizializzazione aggregata estesa

No

 

Catturare *questo per valore

No

 

__ha_include

No

 

Riformulazione dei costruttori ereditari

No

 

Direct-list-init di enumerazioni fisse da numeri interi

No

 

constexpr lambda

No

 

For-loop basati su intervalli generalizzati

[P5]

[[fallthrough]] attributo

[P4] [*]

Attributo [[nodiscard]]

No

 

[[forse_non utilizzato]] attributo

No

 

Letterali esadecimali

No

 

Utilizzo degli spazi dei nomi degli attributi senza ripetizioni

No

 

Allocazione di memoria dinamica sovra-allineata

No

 

Deduzione dell'argomento del modello per i modelli di classe

No

 

Dichiarazione di parametri di modello non di tipo con auto

No

 

Guaranteed copy elision

No

 

Replacement of class objects containing reference members

No

 

Refining expression evaluation order

No

 

Structured bindings

No

 

Ignoring unrecognized attributes

No

 

constexpr if-statements

No

 

Selection statements with initializers

No

 

Inline variables

No

 

Explicit default constructors and copy-list-initialization

No

 

[A] This is deliberately ignoring C++03’s dynamic exception specifications, which were deprecated in C++11.  We aren’t planning to implement them, and hopefully they’ll be removed from a future C++ Standard.

[B] The compiler’s support for Expression SFINAE is continuing to improve (and has been sufficient for the STL since VS 2015 Update 2), but remains Partial.  We’ll publish a detailed blog post about this in the near future.

[C] The compiler’s support for C99 Preprocessor rules remains Partial.  Variadic macros are supported, but there are many bugs in the preprocessor’s behavior.  We’ll overhaul the preprocessor before marking this as Yes.

[D] This is marked as Not Applicable because compilers are permitted, but not required, to support extended integer types.  Like GCC and Clang, we’ve chosen not to support them.

[E] Similarly, this is marked as Not Applicable because compilers are permitted, but not required, to implement this optimization.

[P4] Implemented in VS “15” Preview 4.

[P5] Implemented in VS “15” Preview 5.

[*] These features are guarded by the /std:c++latest compiler option.

STL Features

Stato

Std

Paper

Titolo

missing

C++17

P0258R2

has_unique_object_representations

missing

C++17

P0063R3

C11 Standard Library

missing

C++17

P0030R1

hypot(x, y, z)

missing

C++17

P0033R1

Rewording enable_shared_from_this

C++17

P0220R1

Library Fundamentals V1

missing

C++17

shared_ptr, shared_ptr

missing

C++17

P0084R2

Emplace Return Type

missing

C++17

P0083R3

Splicing Maps And Sets

missing

C++17

P0031R0

constexpr For (Again) And

missing

C++17

P0152R1

atomic::is_always_lock_free

missing

C++17

P0005R4

not_fn()

patch

C++17

P0358R1

Fixes For not_fn()

missing

C++17

P0295R0

gcd(), lcm()

missing

C++17

P0154R1

hardware_destructive_interference_size, etc.

missing

C++17

P0067R3

Elementary String Conversions

missing

C++17

/ Boyer-Moore search()

patch

C++17

P0253R1

Fixing Searcher Return Types

missing

C++17

P0174R2

Deprecating Vestigial Library Parts

missing

C++17

P0302R1

Removing Allocator Support In std::function

missing

C++17

P0040R3

Extending Memory Management Tools

missing

C++17

patch

C++17

P0337R0

Deleting polymorphic_allocator Assignment

missing

C++17

P0024R2

Parallel Algorithms

patch

C++17

P0336R1

Renaming Parallel Execution Policies

patch

C++17

P0394R4

Parallel Algorithms Should terminate() For Exceptions

missing

C++17

P0226R1

Mathematical Special Functions

missing

C++17

P0218R1

patch

C++17

P0219R1

Relative Paths For Filesystem

patch

C++17

P0392R0

Supporting string_view In Filesystem Paths

doomed

C++17

P0181R1

Ordered By Default

RC

C++17

RC

C++17

RC

C++17

apply()

RC

C++17

P0209R2

make_from_tuple()

RC

C++17

P0254R2

Integrating string_view And std::string

Preview 5

C++17

Preview 5

C++17

P0032R3

Homogeneous Interface For variant/any/optional

Preview 5

C++17

P0088R3

Preview 5

C++17

P0163R0

shared_ptr::weak_type

Preview 5

C++17

P0307R2

Making Optional Greater Equal Again

Preview 5

C++17

P0393R3

Making Variant Greater Equal

Preview 4

C++17

sample()

Preview 4

C++17

P0077R2

is_callable, is_nothrow_callable

Update 3

C++17

P0025R1

clamp()

Update 3

C++17

P0185R1

is_swappable, is_nothrow_swappable

Update 3

C++17

P0272R1

Non-const basic_string::data()

Aggiornamento 2

C++14

N3462

SFINAE-Friendly result_of

Aggiornamento 2

C++17

N4387

Miglioramento di coppia e tupla

Up2 Win7+

C++17

N4508

shared_mutex (senza orario)

Attivazione Up2

C++17

P0004R1

Rimozione degli alias Iostream deprecati

Aggiornamento 2

C++17

P0006R0

Modelli di variabili per i tratti di tipo (is_same_v, ecc.)

Aggiornamento 2

C++17

P0007R1

as_const()

Aggiornamento 2

C++17

P0013R1

Tratti di tipo operatore logico (congiunzione, ecc.)

Aggiornamento 2

C++17

P0074R0

proprietario_senza<>

Aggiornamento 2

C++17

P0092R1

floor(), ceil(), round(), abs()

Aggiornamento 2

C++17

P0156R0

Lock_guard variabile

CONTRO 2015

C++14

N3302

constexpr Per

CONTRO 2015

C++14

N3469

constexpr Per

CONTRO 2015

C++14

N3470

constexpr Per

CONTRO 2015

C++14

N3471

constexpr Per , ,

CONTRO 2015

C++14

N3545

costante_integrale::operatore()()

CONTRO 2015

C++14

N3642

UDL per , (1729ms, "miagolio" e così via)

CONTRO 2015

C++14

N3644

Iteratori in avanti nulli

CONTRO 2015

C++14

N3654

quotato()

CONTRO 2015

C++14

N3657

Ricerca associativa eterogenea

CONTRO 2015

C++14

N3658

sequenza_intera

CONTRO 2015

C++14

N3659

shared_mutex (a tempo)

CONTRO 2015

C++14

N3668

scambio()

CONTRO 2015

C++14

N3669

Correzione delle funzioni membro constexpr senza const

CONTRO 2015

C++14

N3670

get()

CONTRO 2015

C++14

N3671

Dual-Range equal(), is_permutation(), mismatch()

CONTRO 2015

C++14

N3778

Contrattazione di dimensioni

CONTRO 2015

C++14

N3779

UDL per (3.14i, ecc.)

CONTRO 2015

C++14

N3789

constexpr Per

CONTRO 2015

C++14

N3887

tuple_elemento_t

CONTRO 2015

C++14

N3891

Ridenominazione di shared_mutex (a tempo) in shared_timed_mutex

CONTRO 2015

C++17

N3911

vuoto_t

CONTRO 2015

C++17

N4089

Conversioni sicure in unique_ptr

CONTRO 2015

C++17

N4169

invoca()

adesione 2015

C++17

N4190

Rimozione di auto_ptr, random_shuffle() e vecchie cose

CONTRO 2015

C++17

N4258

noeccetto Pulizie

CONTRO 2015

C++17

N4259

uncaught_exception()

CONTRO 2015

C++17

N4277

Trivially Copyable reference_wrapper

CONTRO 2015

C++17

N4279

insert_or_assign()/try_emplace() For map/unordered_map

CONTRO 2015

C++17

N4280

size(), empty(), data()

CONTRO 2015

C++17

N4366

Precisely Constraining unique_ptr Assignment

CONTRO 2015

C++17

N4389

bool_constant

VS 2013

C++14

N3346

Minimal Container Element Requirements

VS 2013

C++14

N3421

Transparent Operator Functors (less<>, etc.)

VS 2013

C++14

N3655

Alias Templates For (decay_t, etc.)

VS 2013

C++14

N3656

make_unique()

VS 2013

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

N/A

C++17

P0175R1

Synopses For The C Library

N/A

C++17

P0180R2

Reserving Namespaces For Future Standardization

N/A

C++17

P0346R1

A Nomenclature Tweak

N/A

C++17

P0371R1

Discouraging memory_order_consume

This table is somewhat complicated; we use it to track our work, so it has to be detailed enough to tell us what to do.

“…” indicates where the Library Fundamentals V1 paper has been decomposed into its individual features.

“missing” means not yet implemented.  We’re working on it!  We were fully caught up in January, but then more features got voted in.

“patch” indicates where a feature was voted in, and then a paper fixing that feature somehow was also voted in.  We’ll implement them together, so they don’t really represent any additional work for us to do.  (Each patch is grouped below its affected feature.)

“doomed” indicates that the Ordered By Default feature has been found to break ABI compatibility (in other compilers), will not be implemented by any vendor, and will be removed from C++17.

“N/A” papers aren’t actually features – they altered Standardese, but didn’t create any work for implementers.  They’re listed for completeness.

“VS 2013” indicates features that were supported long, long ago, in a compiler far, far away.

“VS 2015” indicates features that were supported in VS 2015 RTM.

“Update 2” and “Update 3” refer to VS 2015.

“Preview 4” and “Preview 5” refer to VS “15”.

“RC” indicates features that have been checked into VS “15”, but not in time for the Preview 5 build.  They’ll be available in the Release Candidate build.

Note that while we’ve implemented the Filesystem TS (and for historical reasons we’re providing it as both and ), we need to overhaul its implementation before moving around its namespace and marking the Standard feature as implemented.

STL Fixes in VS “15” Preview 5

Fixed silent bad codegen for stateful user-defined allocators requesting propagate_on_container_copy_assignment and propagate_on_container_move_assignment.

Added .

Improved weak_ptr::lock() performance.

Fixed std::promise’s move assignment operator, which previously could cause code to block forever (VSO#243880/Connect#2972781).

Fixed compiler errors with atomic’s implicit conversion to T * (VSO#257598).

pointer_traits now correctly detects Ptr::rebind.

Fixed a missing const qualifier in move_iterator’s subtraction operator.

atomic now tolerates overloaded operator&() (VSO#198738).

Slightly improved compiler diagnostics for incorrect bind() calls (VSO#246001, reddit)

Simplified unique_ptr::operator->() (VSO#239517/Connect#2918170).

Changed the container adaptors to have implicitly defined copy/move constructors (VSO#234651).

To increase compiler throughput, STL headers now avoid including declarations for unnecessary compiler intrinsics (VSO#221287, requested by Clang and Chromium devs).  This is inherently a source breaking change . If your code was assuming that or other STL headers drag in , the mega-header providing declarations of compiler intrinsics, this assumption has been broken. Now we include a sub-header with just the intrinsics that we need to make shared_ptr and atomic work. If you encounter compiler errors, the fix is simple:include directly.

Library Issues

Stato

Std

Issue

Titolo

missing

C++17

LWG 1169

num_get not fully compatible with strto*

missing

C++17

LWG 2059

C++0x ambiguity problem with map::erase

missing

C++17

LWG 2156

Unordered containers’ reserve(n) reserves for n-1 elements

missing

C++17

LWG 2408

SFINAE-friendly common_type / iterator_traits is missing in C++14

missing

C++17

LWG 2415

Inconsistency between unique_ptr and shared_ptr

missing

C++17

LWG 2422

std::numeric_limits::is_modulo description:“most machines” errata

missing

C++17

LWG 2436

Comparators for associative containers should always be CopyConstructible

missing

C++17

LWG 2724

The protected virtual member functions of memory_resource should be private

filesystem

C++17

LWG 2667

path::root_directory() description is confusing

filesystem

C++17

LWG 2669

recursive_directory_iterator effects refers to non-existent functions

filesystem

C++17

LWG 2670

system_complete refers to undefined variable ‘base’

filesystem

C++17

LWG 2671

Errors in Copy

filesystem

C++17

LWG 2673

status() effects cannot be implemented as specified

filesystem

C++17

LWG 2674

Bidirectional iterator requirement on path::iterator is very expensive

filesystem

C++17

LWG 2683

filesystem::copy() says “no effects”

filesystem

C++17

LWG 2704

recursive_directory_iterator’s members should require ‘*this is dereferenceable’

filesystem

C++17

LWG 2706

Error reporting for recursive_directory_iterator::pop() is under-specified

filesystem

C++17

LWG 2707

path construction and assignment should have “string_type&&” overloads

filesystem

C++17

LWG 2711

path is convertible from approximately everything under the sun

filesystem

C++17

LWG 2720

permissions function incorrectly specified for symlinks

filesystem

C++17

LWG 2721

remove_all has incorrect post conditions

filesystem

C++17

LWG 2723

Do directory_iterator and recursive_directory_iterator become the end iterator upon error?

filesystem

C++17

LWG 2725

filesystem::exists(const path&, error_code&) error reporting

filesystem

C++17

LWG 2726

[recursive_]directory_iterator::increment(error_code&) is underspecified

filesystem

C++17

LWG 2728

status(p).permissions() and symlink_status(p).permissions() are not specified

parallel

C++17

LWG 2687

{inclusive,exclusive}_scan misspecified

parallel

C++17

LWG 2689

Parallel versions of std::copy and std::move shouldn’t be in order

parallel

C++17

LWG 2727

Parallel algorithms with constexpr specifier

WCFB02

C++14

LWG 2140

notify_all_at_thread_exit synchronization

WCFB02

C++17

LWG 2309

mutex::lock() should not throw device_or_resource_busy

RTM

New

LWG 2769

Redundant const in the return type of any_cast(const any&)

RC

C++14

LWG 2252

Strong guarantee on vector::push_back() still broken with C++11?

RC

New

LWG 2509

[fund.ts.v2] any_cast doesn’t work with rvalue reference targets and cannot move with a value target

RC

New

LWG 2744

any’s in_place constructors

RC

New

LWG 2746

Inconsistency between requirements for emplace between optional and variant

RC

New

LWG 2754

The in_place constructors and emplace functions added by P0032R3 don’t require CopyConstructible

Preview 5

C++14

LWG 2350

min, max, and minmax should be constexpr

Preview 5

C++17

LWG 2192

Validity and return type of std::abs(0u) is unclear

Preview 5

C++17

LWG 2276

Missing requirement on std::promise::set_exception

Preview 5

C++17

LWG 2328

Rvalue stream extraction should use perfect forwarding

Preview 5

C++17

LWG 2369

constexpr max(initializer_list) vs max_element

Preview 5

C++17

LWG 2485

get() should be overloaded for const tuple&&

Preview 5

C++17

LWG 2520

N4089 broke initializing unique_ptr from a nullptr

Preview 5

C++17

LWG 2719

permissions function should not be noexcept due to narrow contract

Preview 5

New

LWG 2713

More missing allocator-extended constructors for unordered containers

Preview 5

New

LWG 2756

C++ WP optional should ‘forward’ T’s implicit conversions

Preview 4

C++14

LWG 2135

Unclear requirement for exceptions thrown in condition_variable::wait()

Preview 4

C++14

LWG 2203

scoped_allocator_adaptor uses wrong argument types for piecewise construction

Preview 4

C++14

LWG 2210

Missing allocator-extended constructor for allocator-aware containers

Preview 4

C++17

LWG 2063

Contradictory requirements for string move assignment

Preview 4

C++17

LWG 2219

INVOKE-ing a pointer to member with a reference_wrapper as the object expression

Preview 4

C++17

LWG 2439

unique_copy() sometimes can’t fall back to reading its output

Preview 4

C++17

LWG 2476

scoped_allocator_adaptor is not assignable

Preview 4

C++17

LWG 2566

Requirements on the first template parameter of container adaptors

Preview 4

C++17

LWG 2576

istream_iterator and ostream_iterator should use std::addressof

Preview 4

C++17

LWG 2577

{shared,unique}_lock should use std::addressof

Preview 4

C++17

LWG 2579

Inconsistency wrt Allocators in basic_string assignment vs. basic_string::assign

Preview 4

C++17

LWG 2583

There is no way to supply an allocator for basic_string(str, pos)

Preview 4

C++17

LWG 2586

Wrong value category used in scoped_allocator_adaptor::construct()

Preview 4

C++17

LWG 2684

priority_queue lacking comparator typedef

Preview 4

C++17

LWG 2716

Specification of shuffle and sample disallows lvalue URNGs

Update 3

C++14

LWG 2064

More noexcept issues in basic_string

Update 3

C++17

LWG 2296

std::addressof should be constexpr

Update 3

C++17

LWG 2596

vector::data() should use addressof

Update 3

C++17

LWG 2688

clamp misses preconditions and has extraneous condition on result

Aggiornamento 2

C++14

LWG 2005

unordered_map::insert(T&&) protection should apply to map too

Aggiornamento 2

C++14

LWG 2021

Further incorrect usages of result_of

Aggiornamento 2

C++14

LWG 2132

std::function ambiguity

Aggiornamento 2

C++14

LWG 2196

Specification of is_*[copy/move]_[constructible/assignable] unclear for non-referencable types

Aggiornamento 2

C++17

LWG 2101

Some transformation types can produce impossible types

Aggiornamento 2

C++17

LWG 2106

move_iterator wrapping iterators returning prvalues

Aggiornamento 2

C++17

LWG 2127

Move-construction with raw_storage_iterator

Aggiornamento 2

C++17

LWG 2217

operator==(sub_match, string) slices on embedded ‘\0’s

Aggiornamento 2

C++17

LWG 2312

tuple’s constructor constraints need to be phrased more precisely

Aggiornamento 2

C++17

LWG 2353

std::next is over-constrained

Aggiornamento 2

C++17

LWG 2354

Unnecessary copying when inserting into maps with braced-init syntax

Aggiornamento 2

C++17

LWG 2367

pair and tuple are not correctly implemented for is_constructible with no args

Attivazione Up2

C++17

LWG 2385

function::assign allocator argument doesn’t make sense

Aggiornamento 2

C++17

LWG 2393

std::function’s Callable definition is broken

Aggiornamento 2

C++17

LWG 2455

Allocator default construction should be allowed to throw

Aggiornamento 2

C++17

LWG 2466

allocator_traits::max_size() default behavior is incorrect

Aggiornamento 2

C++17

LWG 2469

Wrong specification of Requires clause of operator[] for map and unordered_map

Aggiornamento 2

C++17

LWG 2549

Tuple EXPLICIT constructor templates […] will create dangling references

CONTRO 2015

C++14

GB 9

Remove gets from C++14

CONTRO 2015

C++14

LWG 2009

Reporting out-of-bound values on numeric string conversions

CONTRO 2015

C++14

LWG 2078

Throw specification of async() incomplete

CONTRO 2015

C++14

LWG 2094

duration conversion overflow shouldn’t participate in overload resolution

CONTRO 2015

C++14

LWG 2097

packaged_task constructors should be constrained

CONTRO 2015

C++14

LWG 2103

std::allocator_traits>::propagate_on_container_move_assignment

CONTRO 2015

C++14

LWG 2104

unique_lock move-assignment should not be noexcept

CONTRO 2015

C++14

LWG 2112

User-defined classes that cannot be derived from

CONTRO 2015

C++14

LWG 2144

Missing noexcept specification in type_index

CONTRO 2015

C++14

LWG 2145

error_category default constructor

CONTRO 2015

C++14

LWG 2162

allocator_traits::max_size missing noexcept

CONTRO 2015

C++14

LWG 2174

wstring_convert::converted() should be noexcept

CONTRO 2015

C++14

LWG 2176

Special members for wstring_convert and wbuffer_convert

CONTRO 2015

C++14

LWG 2187

vector is missing emplace and emplace_back member functions

CONTRO 2015

C++14

LWG 2193

Default constructors for standard library containers are explicit

CONTRO 2015

C++14

LWG 2247

Type traits and std::nullptr_t

CONTRO 2015

C++14

LWG 2268

Setting a default argument in the declaration of a member function assign of std::basic_string

CONTRO 2015

C++14

LWG 2272

quoted should use char_traits::eq for character comparison

CONTRO 2015

C++14

LWG 2275

Why is forward_as_tuple not constexpr?

CONTRO 2015

C++14

LWG 2278

User-defined literals for Standard Library types

CONTRO 2015

C++14

LWG 2280

begin / end for arrays should be constexpr and noexcept

CONTRO 2015

C++14

LWG 2285

make_reverse_iterator

CONTRO 2015

C++14

LWG 2301

Why is std::tie not constexpr?

CONTRO 2015

C++14

LWG 2306

match_results::reference should be value_type&, not const value_type&

CONTRO 2015

C++14

LWG 2315

weak_ptr should be movable

CONTRO 2015

C++14

LWG 2324

Insert iterator constructors should use addressof()

CONTRO 2015

C++14

LWG 2329

regex_match()/regex_search() with match_results should forbid temporary strings

CONTRO 2015

C++14

LWG 2332

regex_iterator/regex_token_iterator should forbid temporary regexes

CONTRO 2015

C++14

LWG 2339

Wording issue in nth_element

CONTRO 2015

C++14

LWG 2344

quoted()’s interaction with padding is unclear

CONTRO 2015

C++14

LWG 2346

integral_constant’s member functions should be marked noexcept

CONTRO 2015

C++17

LWG 2129

User specializations of std::initializer_list

CONTRO 2015

C++17

LWG 2133

Attitude to overloaded comma for iterators

CONTRO 2015

C++17

LWG 2212

tuple_size for const pair request header

CONTRO 2015

C++17

LWG 2234

assert() should allow usage in constant expressions

CONTRO 2015

C++17

LWG 2365

Missing noexcept in shared_ptr::shared_ptr(nullptr_t)

CONTRO 2015

C++17

LWG 2399

shared_ptr’s constructor from unique_ptr should be constrained

CONTRO 2015

C++17

LWG 2400

shared_ptr’s get_deleter() should use addressof()

CONTRO 2015

C++17

LWG 2401

std::function needs more noexcept

CONTRO 2015

C++17

LWG 2403

stof() should call strtof() and wcstof()

CONTRO 2015

C++17

LWG 2407

packaged_task(allocator_arg_t, const Allocator&, F&&) should neither be constrained nor explicit

CONTRO 2015

C++17

LWG 2420

function does not discard the return value of the target object

CONTRO 2015

C++17

LWG 2426

Issue about compare_exchange

CONTRO 2015

C++17

LWG 2433

uninitialized_copy()/etc. should tolerate overloaded operator&

CONTRO 2015

C++17

LWG 2440

seed_seq::size() should be noexcept

CONTRO 2015

C++17

LWG 2442

call_once() shouldn’t DECAY_COPY()

CONTRO 2015

C++17

LWG 2454

Add raw_storage_iterator::base() member

CONTRO 2015

C++17

LWG 2458

N3778 and new library deallocation signatures

CONTRO 2015

C++17

LWG 2464

try_emplace and insert_or_assign misspecified

CONTRO 2015

C++17

LWG 2467

is_always_equal has slightly inconsistent default

CONTRO 2015

C++17

LWG 2483

throw_with_nested() should use is_final

CONTRO 2015

C++17

LWG 2484

rethrow_if_nested() is doubly unimplementable

CONTRO 2015

C++17

LWG 2486

mem_fn() should be required to use perfect forwarding

CONTRO 2015

C++17

LWG 2487

bind() should be const-overloaded, not cv-overloaded

CONTRO 2015

C++17

LWG 2488

Placeholders should be allowed and encouraged to be constexpr

CONTRO 2015

C++17

LWG 2489

mem_fn() should be noexcept

VS 2013

C++14

LWG 1214

Insufficient/inconsistent key immutability requirements for associative containers

VS 2013

C++14

LWG 2011

Unexpected output required of strings

VS 2013

C++14

LWG 2018

regex_traits::isctype Returns clause is wrong

VS 2013

C++14

LWG 2033

Preconditions of reserve, shrink_to_fit, and resize functions

VS 2013

C++14

LWG 2039

Issues with std::reverse and std::copy_if

VS 2013

C++14

LWG 2047

Incorrect “mixed” move-assignment semantics of unique_ptr

VS 2013

C++14

LWG 2049

is_destructible is underspecified

VS 2013

C++14

LWG 2050

Unordered associative containers do not use allocator_traits to define member types

VS 2013

C++14

LWG 2056

future_errc enums start with value 0 (invalid value for broken_promise)

VS 2013

C++14

LWG 2061

make_move_iterator and arrays

VS 2013

C++14

LWG 2067

packaged_task should have deleted copy c’tor with const parameter

VS 2013

C++14

LWG 2074

Off by one error in std::reverse_copy

VS 2013

C++14

LWG 2083

const-qualification on weak_ptr::owner_before

VS 2013

C++14

LWG 2087

iostream_category() and noexcept

VS 2013

C++14

LWG 2096

Incorrect constraints of future::get in regard to MoveAssignable

VS 2013

C++14

LWG 2128

Absence of global functions cbegin/cend

VS 2013

C++14

LWG 2138

atomic_flag::clear ordering constraints

VS 2013

C++14

LWG 2141

common_type trait produces reference types

VS 2013

C++14

LWG 2143

ios_base::xalloc should be thread-safe

VS 2013

C++14

LWG 2148

Hashing enums should be supported directly by std::hash

VS 2013

C++14

LWG 2188

Reverse iterator does not fully support targets that overload operator&

VS 2013

C++14

LWG 2197

Specification of is_[un]signed unclear for non-arithmetic types

VS 2013

C++14

LWG 2213

Return value of std::regex_replace

VS 2013

C++14

LWG 2229

Standard code conversion facets underspecified

VS 2013

C++14

LWG 2284

Inconsistency in allocator_traits::max_size

VS 2013

C++14

LWG 2293

Wrong facet used by num_put::do_put

VS 2013

C++14

LWG 2313

tuple_size should always derive from integral_constant

VS 2013

C++14

LWG 2317

The type property queries should be UnaryTypeTraits returning size_t

VS 2013

C++14

LWG 2330

regex(“meow”, regex::icase) is technically forbidden but should be permitted

VS 2013

C++14

LWG 2341

Inconsistency between basic_ostream::seekp(pos) and basic_ostream::seekp(off, dir)

VS 2013

C++14

LWG 2359

How does regex_constants::nosubs affect basic_regex::mark_count()?

VS 2013

C++14

LWG 2360

reverse_iterator::operator*() is unimplementable

VS 2013

C++17

LWG 2244

Issue on basic_istream::seekg

VS 2013

C++17

LWG 2273

regex_match ambiguity

VS 2013

C++17

LWG 2441

Exact-width atomic typedefs should be provided

VS 2013

C++17

LWG 2473

basic_filebuf’s relation to C FILE semantics

VS 2013

C++17

LWG 2537

Constructors for priority_queue taking allocators should call make_heap

VS 2013

C++17

LWG 2560

is_constructible underspecified when applied to a function type

This table is enormous, even after omitting 146 N/A issues.  The Library Working Group fixes a lot of bugs in the Standard.

“New” indicates issues which haven’t actually been resolved in C++17 yet.  We felt that these issues had to be dealt with before shipping the affected feature, and we expect that our implemented resolution will be accepted.

“RTM” indicates an issue which has been fixed for the official release of VS “15”, but not in time for the Release Candidate build.

“WCFB02” indicates issues that will be fixed in a future, binary-incompatible release of the STL (but not the STL shipping in VS “15”).

“filesystem” indicates issues affecting , which we’ll be analyzing when we overhaul that feature’s implementation.

“parallel” indicates issues affecting the Parallel Algorithms feature, which we haven’t yet implemented.

Note that we’ve implemented all C++14 STL features (result_of SFINAE in VS 2015 Update 2 was the last one) and all C++14 Library Issues.  Excluding LWG 2140 (which had to be fixed outside of VS “15” due to bincompat), the last Library Issue was LWG 2252, fixed by a major overhaul of std::vector in VS “15” RC.  We’ll publish more details about that in the near future.

Two issues here are notable.  LWG 2350 and LWG 2369, implemented in Preview 5, mean that we’ve enabled C++14 constexpr in min/max/minmax(initializer_list) and min_element/max_element/minmax_element().  However, while this is supported by our codegen compilers (C1XX and Clang), this is not yet supported by our Intellisense compiler (EDG).  We’re working on fixing this.

Billy Robert O’Neal III – @MalwareMinigun – [email protected]

Casey Carter – @CoderCasey – [email protected]

Stephan T. Lavavej – @StephanTLavavej – [email protected]