|
zygoloid |
Fix to 2013-09 LWG Motion 7:
…
[comparisons] Fix incorrect application of N3789 to the working paper: - Add 'constexpr' to std::equal_to<>::operator() std::not_equal_to<>::operator() std::greater<>::operator() std::less<>::operator() std::greater_equal<>::operator() std::less_equal<>::operator() - Reorder 'bool constexpr' to 'constexpr bool' in std::logical_or<T>::operator() std::logical_and<T>::operator() std::logical_not<T>::operator() Also fixes 14882:2014 DIS JP 08, fixes 14882:2014 DIS JP 09, fixes #291. |
62734eb
|
|
|
zygoloid |
JP 06: [dcl.constexpr] Remove incorrect example.
…
Also fixes #370. |
4321702
|
|
|
zygoloid |
[multiset.cons] Add missing parameter type.
…
Fixes #189. |
c20b92c
|
|
|
zygoloid |
JP 11: [thread.mutex.requirements.general] Remove outdated sentence.
…
This sentence directly contradicts several other portions of the standard, and does not reflect the intended meaning. |
5208210
|
|
|
zygoloid |
Update config for building D4141.
|
f696706
|
|
|
jwakely |
[atomics.syn] Fix typo by replacing ')' with '_'
…
Fixes #359 |
6512d97
|
|
|
jwakely |
[atomics.syn] Replace comma with period
…
Reported by Stephan T. Lavavej. Fixes #340 |
013e01f
|
|
|
jwakely |
[func.bind.bind] Fix "template parameter back" typo.
…
Fixes #316 |
ebde185
|
|
|
jwakely |
[futures.overview] Add ArgTypes... to swap declaration.
…
Fixes #336 |
d79ad59
|
|
zygoloid |
Update document stage.
|
c0599d3
|
|
|
zygoloid |
Update document stage code too.
|
0d8d6b0
|
@@ -81,9 +81,9 @@ | ||
bool atomic_compare_exchange_strong(@\textit{atomic-type}@*, T*, T) noexcept; | ||
bool atomic_compare_exchange_weak_explicit(volatile @\textit{atomic-type}@*, T*, T, | ||
memory_order, memory_order) noexcept; | ||
- bool atomic_compare_exchange_weak_explicit(@\textit{atomic-type}@*, T*, T. | ||
+ bool atomic_compare_exchange_weak_explicit(@\textit{atomic-type}@*, T*, T, | ||
memory_order, memory_order) noexcept; | ||
- bool atomic_compare)exchange_strong_explicit(volatile @\textit{atomic-type}@*, T*, T, | ||
+ bool atomic_compare_exchange_strong_explicit(volatile @\textit{atomic-type}@*, T*, T, | ||
memory_order, memory_order) noexcept; | ||
bool atomic_compare_exchange_strong_explicit(@\textit{atomic-type}@*, T*, T, | ||
memory_order, memory_order) noexcept; | ||
@@ -1,8 +1,8 @@ | ||
%!TEX root = std.tex | ||
%%-------------------------------------------------- | ||
%% Version numbers | ||
-\newcommand{\docno}{N3936} | ||
-\newcommand{\prevdocno}{N3797} | ||
+\newcommand{\docno}{N4141} | ||
+\newcommand{\prevdocno}{N3936} | ||
\newcommand{\cppver}{201402L} | ||
%% Release date | ||
@@ -10,4 +10,4 @@ | ||
%% Library chapters | ||
\newcommand{\firstlibchapter}{language.support} | ||
-\newcommand{\lastlibchapter}{thread} | ||
+\newcommand{\lastlibchapter}{thread} |
@@ -6570,7 +6570,7 @@ | ||
\indexlibrary{\idxcode{multiset}!\idxcode{multiset}}% | ||
\begin{itemdecl} | ||
template <class InputIterator> | ||
- multiset(InputIterator first, last, | ||
+ multiset(InputIterator first, InputIterator last, | ||
const Compare& comp = Compare(), const Allocator& = Allocator()); | ||
\end{itemdecl} | ||
@@ -8,7 +8,7 @@ | ||
\vspace{2ex} | ||
\begin{flushright} | ||
-\textbf{ISO/IEC JTC1 SC22 WG21 N\,\LARGE3290} | ||
+\textbf{ISO/IEC JTC1 SC22 WG21 N\,\LARGE4141} | ||
Date: \reldate | ||
@@ -49,7 +49,7 @@ | ||
\vfill | ||
\noindent | ||
Document type: Draft International Standard\\ | ||
-Document stage: (40) Enquiry\\ | ||
+Document stage: (60) Publication\\ | ||
Document Language: E | ||
\pagebreak | ||
@@ -954,14 +954,6 @@ | ||
The \tcode{constexpr} specifier has no | ||
effect on the type of a \tcode{constexpr} function or a \tcode{constexpr} constructor. \enterexample | ||
\begin{codeblock} | ||
-class debug_flag { | ||
-public: | ||
- explicit debug_flag(bool); | ||
- constexpr bool is_on() const; // error: \tcode{debug_flag} not | ||
- // literal type | ||
-private: | ||
- bool flag; | ||
-}; | ||
constexpr int bar(int x, int y) // OK | ||
{ return x + y + x*y; } | ||
// ... | ||
@@ -1,6 +1,6 @@ | ||
%!TEX root = std.tex | ||
-\input{cover-wd} | ||
-% \input{cover-reg} | ||
+% \input{cover-wd} | ||
+\input{cover-reg} | ||
%%-------------------------------------------------- | ||
%% The table of contents, list of tables, and list of figures | ||
@@ -3,8 +3,8 @@ | ||
%%-------------------------------------------------- | ||
%% basics | ||
-% \documentclass[letterpaper,oneside,openany]{memoir} | ||
-\documentclass[ebook,10pt,oneside,openany,final]{memoir} | ||
+\documentclass[letterpaper,oneside,openany,final]{memoir} | ||
+% \documentclass[ebook,10pt,oneside,openany,final]{memoir} | ||
% \includeonly{declarations} | ||
\usepackage[american] | ||
@@ -33,7 +33,7 @@ | ||
\usepackage[pdftex, | ||
pdftitle={C++ International Standard}, | ||
pdfsubject={C++ International Standard}, | ||
- pdfcreator={Stefanus Du Toit}, | ||
+ pdfcreator={Richard Smith}, | ||
bookmarks=true, | ||
bookmarksnumbered=true, | ||
pdfpagelabels=true, | ||
@@ -890,8 +890,7 @@ | ||
data between execution agents~(\ref{thread.req.lockable}). | ||
An execution agent \term{owns} a mutex from the time it successfully calls one of the | ||
lock functions until it calls unlock. Mutexes can be either recursive or non-recursive, and can | ||
-grant simultaneous ownership to one or many execution agents. The mutex types supplied by the standard | ||
-library provide exclusive ownership semantics: only one thread may own the mutex at a time. Both | ||
+grant simultaneous ownership to one or many execution agents. Both | ||
recursive and non-recursive mutexes are supplied. | ||
\rSec3[thread.mutex.requirements.mutex]{Mutex types} | ||
@@ -3506,7 +3505,7 @@ | ||
template <class R, class... ArgTypes> | ||
class packaged_task<R(ArgTypes...)>; | ||
- template <class R> | ||
+ template <class R, class... ArgTypes> | ||
void swap(packaged_task<R(ArgTypes...)>&, packaged_task<R(ArgTypes...)>&) noexcept; | ||
template <class R, class Alloc> | ||
@@ -7807,7 +7807,7 @@ | ||
\indexlibrary{\idxcode{equal_to<>}}% | ||
\begin{itemdecl} | ||
template <> struct equal_to<void> { | ||
- template <class T, class U> auto operator()(T&& t, U&& u) const | ||
+ template <class T, class U> constexpr auto operator()(T&& t, U&& u) const | ||
-> decltype(std::forward<T>(t) == std::forward<U>(u)); | ||
typedef @\unspec@ is_transparent; | ||
@@ -7822,7 +7822,7 @@ | ||
\indexlibrary{\idxcode{not_equal_to<>}}% | ||
\begin{itemdecl} | ||
template <> struct not_equal_to<void> { | ||
- template <class T, class U> auto operator()(T&& t, U&& u) const | ||
+ template <class T, class U> constexpr auto operator()(T&& t, U&& u) const | ||
-> decltype(std::forward<T>(t) != std::forward<U>(u)); | ||
typedef @\unspec@ is_transparent; | ||
@@ -7837,7 +7837,7 @@ | ||
\indexlibrary{\idxcode{greater<>}}% | ||
\begin{itemdecl} | ||
template <> struct greater<void> { | ||
- template <class T, class U> auto operator()(T&& t, U&& u) const | ||
+ template <class T, class U> constexpr auto operator()(T&& t, U&& u) const | ||
-> decltype(std::forward<T>(t) > std::forward<U>(u)); | ||
typedef @\unspec@ is_transparent; | ||
@@ -7852,7 +7852,7 @@ | ||
\indexlibrary{\idxcode{less<>}}% | ||
\begin{itemdecl} | ||
template <> struct less<void> { | ||
- template <class T, class U> auto operator()(T&& t, U&& u) const | ||
+ template <class T, class U> constexpr auto operator()(T&& t, U&& u) const | ||
-> decltype(std::forward<T>(t) < std::forward<U>(u)); | ||
typedef @\unspec@ is_transparent; | ||
@@ -7867,7 +7867,7 @@ | ||
\indexlibrary{\idxcode{greater_equal<>}}% | ||
\begin{itemdecl} | ||
template <> struct greater_equal<void> { | ||
- template <class T, class U> auto operator()(T&& t, U&& u) const | ||
+ template <class T, class U> constexpr auto operator()(T&& t, U&& u) const | ||
-> decltype(std::forward<T>(t) >= std::forward<U>(u)); | ||
typedef @\unspec@ is_transparent; | ||
@@ -7882,7 +7882,7 @@ | ||
\indexlibrary{\idxcode{less_equal<>}}% | ||
\begin{itemdecl} | ||
template <> struct less_equal<void> { | ||
- template <class T, class U> auto operator()(T&& t, U&& u) const | ||
+ template <class T, class U> constexpr auto operator()(T&& t, U&& u) const | ||
-> decltype(std::forward<T>(t) <= std::forward<U>(u)); | ||
typedef @\unspec@ is_transparent; | ||
@@ -7909,7 +7909,7 @@ | ||
\indexlibrary{\idxcode{logical_and}}% | ||
\begin{itemdecl} | ||
template <class T = void> struct logical_and { | ||
- bool constexpr operator()(const T& x, const T& y) const; | ||
+ constexpr bool operator()(const T& x, const T& y) const; | ||
typedef T first_argument_type; | ||
typedef T second_argument_type; | ||
typedef bool result_type; | ||
@@ -7924,7 +7924,7 @@ | ||
\indexlibrary{\idxcode{logical_or}}% | ||
\begin{itemdecl} | ||
template <class T = void> struct logical_or { | ||
- bool constexpr operator()(const T& x, const T& y) const; | ||
+ constexpr bool operator()(const T& x, const T& y) const; | ||
typedef T first_argument_type; | ||
typedef T second_argument_type; | ||
typedef bool result_type; | ||
@@ -7939,7 +7939,7 @@ | ||
\indexlibrary{\idxcode{logical_not}}% | ||
\begin{itemdecl} | ||
template <class T = void> struct logical_not { | ||
- bool constexpr operator()(const T& x) const; | ||
+ constexpr bool operator()(const T& x) const; | ||
typedef T argument_type; | ||
typedef bool result_type; | ||
}; | ||
@@ -8259,7 +8259,7 @@ | ||
\begin{itemize} | ||
\item \tcode{FD} is the type \tcode{decay_t<F>}, | ||
\item \tcode{fd} is an lvalue of type \tcode{FD} constructed from \tcode{std::forward<F>(f)}, | ||
-\item \tcode{Ti} is the $i^{th}$ type in the template parameter back \tcode{BoundArgs}, | ||
+\item \tcode{Ti} is the $i^{th}$ type in the template parameter pack \tcode{BoundArgs}, | ||
\item \tcode{TiD} is the type \tcode{decay_t<Ti>}, | ||
\item \tcode{ti} is the $i^{th}$ argument in the function parameter pack \tcode{bound_args}, | ||
\item \tcode{tid} is an lvalue of type \tcode{TiD} constructed from \tcode{std::forward<Ti>(ti)}, | ||