Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r48672 - sandbox/committee/concepts/stdlib
From: dgregor_at_[hidden]
Date: 2008-09-08 16:57:49


Author: dgregor
Date: 2008-09-08 16:57:49 EDT (Mon, 08 Sep 2008)
New Revision: 48672
URL: http://svn.boost.org/trac/boost/changeset/48672

Log:
Address some comments from Alisdair
Text files modified:
   sandbox/committee/concepts/stdlib/clib-numerics.tex | 440 +++++++++++++++++++--------------------
   1 files changed, 217 insertions(+), 223 deletions(-)

Modified: sandbox/committee/concepts/stdlib/clib-numerics.tex
==============================================================================
--- sandbox/committee/concepts/stdlib/clib-numerics.tex (original)
+++ sandbox/committee/concepts/stdlib/clib-numerics.tex 2008-09-08 16:57:49 EDT (Mon, 08 Sep 2008)
@@ -48,7 +48,7 @@
 \begin{center}
 \huge
 Concepts for the C++0x Standard Library: Numerics\\
-(Revision 3)
+(Revision 4)
 
 \vspace{0.5in}
 
@@ -62,8 +62,8 @@
 \end{center}
 
 \vspace{1in}
-\par\noindent Document number: N2736=08-0246\vspace{-6pt}
-\par\noindent Revises document number: N2626=08-0136\vspace{-6pt}
+\par\noindent Document number: DRAFT\vspace{-6pt}
+\par\noindent Revises document number: N2736=08-0246\vspace{-6pt}
 \par\noindent Date: \today\vspace{-6pt}
 \par\noindent Project: Programming Language \Cpp{}, Library Working Group\vspace{-6pt}
 \par\noindent Reply-to: Douglas Gregor $<$\href{mailto:dgregor_at_[hidden]}{dgregor_at_[hidden]}$>$\vspace{-6pt}
@@ -71,16 +71,10 @@
 \section*{Introduction}
 \libintrotext{Chapter 26}
 
-\paragraph*{Changes from N2626}
+\paragraph*{Changes from N2736}
 \begin{itemize}
-\item Updated requirements for \tcode{accumulate},
- \tcode{inner_product}, \tcode{partial_sum}, and
- \tcode{adjacent_difference} to cope with move semantics and changes
- to the foundational concepts.
-\item The complex transcendentals and other non-member operations
- require \tcode{FloatingPointType}, which more accurately
- characterizes the actual requirements for the \tcode{complex} type.
-\item Added \tcode{iota}, conceptualized by Daniel Kr\"ugler.
+\item Finished description of \tcode{HasAcons}.
+\item Clean up \tcode{Has*} requirements in \tcode{valarray}.
 \end{itemize}
 
 \paragraph*{Issues resolved in this paper}
@@ -289,7 +283,7 @@
 
 \begin{itemdescr}
 \pnum
-\addedConcepts{\mbox{\reallynote} describes types for which an arc cosine.}
+\addedConcepts{\mbox{\reallynote} describes types for which an arc cosine can be computed.}
 \end{itemdescr}
 
 \begin{itemdecl}
@@ -1442,123 +1436,123 @@
   template<@\changedConcepts{class}{Semiregular}@ T> void swap(valarray<T>&, valarray<T>&&);
 
   template<class T>
- @\addedConcepts{requires HasMultiply<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasMultiply<T, T> \&\& Convertible<HasMultiply<T, T>::result_type, T>}@
     valarray<T> operator* (const valarray<T>&, const valarray<T>&);
   template<class T>
- @\addedConcepts{requires HasMultiply<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasMultiply<T, T> \&\& Convertible<HasMultiply<T, T>::result_type, T>}@
     valarray<T> operator* (const valarray<T>&, const T&);
   template<class T>
- @\addedConcepts{requires HasMultiply<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasMultiply<T, T> \&\& Convertible<HasMultiply<T, T>::result_type, T>}@
     valarray<T> operator* (const T&, const valarray<T>&);
 
   template<class T>
- @\addedConcepts{requires HasDivide<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasDivide<T, T> \&\& Convertible<HasDivide<T, T>::result_type, T>}@
     valarray<T> operator/ (const valarray<T>&, const valarray<T>&);
   template<class T>
- @\addedConcepts{requires HasDivide<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasDivide<T, T> \&\& Convertible<HasDivide<T, T>::result_type, T>}@
     valarray<T> operator/ (const valarray<T>&, const T&);
   template<class T>
- @\addedConcepts{requires HasDivide<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasDivide<T, T> \&\& Convertible<HasDivide<T, T>::result_type, T>}@
     valarray<T> operator/ (const T&, const valarray<T>&);
 
   template<class T>
- @\addedConcepts{requires HasModulus<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasModulus<T, T> \&\& Convertible<HasModulus<T, T>::result_type, T>}@
     valarray<T> operator% (const valarray<T>&, const valarray<T>&);
   template<class T>
- @\addedConcepts{requires HasModulus<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasModulus<T, T> \&\& Convertible<HasModulus<T, T>::result_type, T>}@
     valarray<T> operator% (const valarray<T>&, const T&);
   template<class T>
- @\addedConcepts{requires HasModulus<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasModulus<T, T> \&\& Convertible<HasModulus<T, T>::result_type, T>}@
     valarray<T> operator% (const T&, const valarray<T>&);
 
   template<class T>
- @\addedConcepts{requires HasPlus<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasPlus<T, T> \&\& Convertible<HasPlus<T, T>::result_type, T>}@
     valarray<T> operator+ (const valarray<T>&, const valarray<T>&);
   template<class T>
- @\addedConcepts{requires HasPlus<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasPlus<T, T> \&\& Convertible<HasPlus<T, T>::result_type, T>}@
     valarray<T> operator+ (const valarray<T>&, const T&);
   template<class T>
- @\addedConcepts{requires HasPlus<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasPlus<T, T> \&\& Convertible<HasPlus<T, T>::result_type, T>}@
     valarray<T> operator+ (const T&, const valarray<T>&);
 
   template<class T>
- @\addedConcepts{requires HasMinus<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasMinus<T, T> \&\& Convertible<HasMinus<T, T>::result_type, T>}@
     valarray<T> operator- (const valarray<T>&, const valarray<T>&);
   template<class T>
- @\addedConcepts{requires HasMinus<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasMinus<T, T> \&\& Convertible<HasMinus<T, T>::result_type, T>}@
     valarray<T> operator- (const valarray<T>&, const T&);
   template<class T>
- @\addedConcepts{requires HasMinus<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasMinus<T, T> \&\& Convertible<HasMinus<T, T>::result_type, T>}@
     valarray<T> operator- (const T&, const valarray<T>&);
 
   template<class T>
- @\addedConcepts{requires HasBitXor<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasBitXor<T, T> \&\& Convertible<HasBitXor<T, T>::result_type, T>}@
     valarray<T> operator^ (const valarray<T>&, const valarray<T>&);
   template<class T>
- @\addedConcepts{requires HasBitXor<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasBitXor<T, T> \&\& Convertible<HasBitXor<T, T>::result_type, T>}@
     valarray<T> operator^ (const valarray<T>&, const T&);
   template<class T>
- @\addedConcepts{requires HasBitXor<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasBitXor<T, T> \&\& Convertible<HasBitXor<T, T>::result_type, T>}@
     valarray<T> operator^ (const T&, const valarray<T>&);
 
   template<class T>
- @\addedConcepts{requires HasBitAnd<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasBitAnd<T, T> \&\& Convertible<HasBitAnd<T, T>::result_type, T>}@
     valarray<T> operator& (const valarray<T>&, const valarray<T>&);
   template<class T>
- @\addedConcepts{requires HasBitAnd<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasBitAnd<T, T> \&\& Convertible<HasBitAnd<T, T>::result_type, T>}@
     valarray<T> operator& (const valarray<T>&, const T&);
   template<class T>
- @\addedConcepts{requires HasBitAnd<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasBitAnd<T, T> \&\& Convertible<HasBitAnd<T, T>::result_type, T>}@
     valarray<T> operator& (const T&, const valarray<T>&);
 
   template<class T>
- @\addedConcepts{requires HasBitOr<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasBitOr<T, T> \&\& Convertible<HasBitOr<T, T>::result_type, T>}@
     valarray<T> operator| (const valarray<T>&, const valarray<T>&);
   template<class T>
- @\addedConcepts{requires HasBitOr<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasBitOr<T, T> \&\& Convertible<HasBitOr<T, T>::result_type, T>}@
     valarray<T> operator| (const valarray<T>&, const T&);
   template<class T>
- @\addedConcepts{requires HasBitOr<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasBitOr<T, T> \&\& Convertible<HasBitOr<T, T>::result_type, T>}@
     valarray<T> operator| (const T&, const valarray<T>&);
 
   template<class T>
- @\addedConcepts{requires HasLeftShift<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasLeftShift<T, T> \&\& Convertible<HasLeftShift<T, T>::result_type, T>}@
     valarray<T> operator<<(const valarray<T>&, const valarray<T>&);
   template<class T>
- @\addedConcepts{requires HasLeftShift<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasLeftShift<T, T> \&\& Convertible<HasLeftShift<T, T>::result_type, T>}@
     valarray<T> operator<<(const valarray<T>&, const T&);
   template<class T>
- @\addedConcepts{requires HasLeftShift<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasLeftShift<T, T> \&\& Convertible<HasLeftShift<T, T>::result_type, T>}@
     valarray<T> operator<<(const T&, const valarray<T>&);
 
   template<class T>
- @\addedConcepts{requires HasRightShift<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasRightShift<T, T> \&\& Convertible<HasRightShift<T, T>::result_type, T>}@
     valarray<T> operator>>(const valarray<T>&, const valarray<T>&);
   template<class T>
- @\addedConcepts{requires HasRightShift<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasRightShift<T, T> \&\& Convertible<HasRightShift<T, T>::result_type, T>}@
     valarray<T> operator>>(const valarray<T>&, const T&);
   template<class T>
- @\addedConcepts{requires HasRightShift<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasRightShift<T, T> \&\& Convertible<HasRightShift<T, T>::result_type, T>}@
     valarray<T> operator>>(const T&, const valarray<T>&);
 
   template<class T>
- @\addedConcepts{requires HasLogicalAnd<T>}@
+ @\addedConcepts{requires HasLogicalAnd<T, T>}@
     valarray<bool> operator&&(const valarray<T>&, const valarray<T>&);
   template<class T>
- @\addedConcepts{requires HasLogicalAnd<T>}@
+ @\addedConcepts{requires HasLogicalAnd<T, T>}@
     valarray<bool> operator&&(const valarray<T>&, const T&);
   template<class T>
- @\addedConcepts{requires HasLogicalAnd<T>}@
+ @\addedConcepts{requires HasLogicalAnd<T, T>}@
     valarray<bool> operator&&(const T&, const valarray<T>&);
 
   template<class T>
- @\addedConcepts{requires HasLogicalOr<T>}@
+ @\addedConcepts{requires HasLogicalOr<T, T>}@
     valarray<bool> operator||(const valarray<T>&, const valarray<T>&);
   template<class T>
- @\addedConcepts{requires HasLogicalOr<T>}@
+ @\addedConcepts{requires HasLogicalOr<T, T>}@
     valarray<bool> operator||(const valarray<T>&, const T&);
   template<class T>
- @\addedConcepts{requires HasLogicalOr<T>}@
+ @\addedConcepts{requires HasLogicalOr<T, T>}@
     valarray<bool> operator||(const T&, const valarray<T>&);
 
   template<class T>
@@ -1770,43 +1764,43 @@
     indirect_array<T> operator[](const valarray<size_t>&);
 
     // \ref{valarray.unary} unary operators:
- @\addedConcepts{requires HasUnaryPlus<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasUnaryPlus<T> \&\& Convertible<HasUnaryPlus<T>::result_type, T>}@
       valarray<T> operator+() const;
- @\addedConcepts{requires HasNegate<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasNegate<T> \&\& Convertible<HasNegate<T>::result_type, T>}@
       valarray<T> operator-() const;
- @\addedConcepts{requires HasComplement<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasComplement<T> \&\& Convertible<HasComplement<T>::result_type, T>}@
       valarray<T> operator~() const;
     @\addedConcepts{requires HasLogicalNot<T>}@ valarray<bool> operator!() const;
 
     // \ref{valarray.cassign} computed assignment:
- @\addedConcepts{requires HasMultiplyAssign<T>}@ valarray<T>& operator*= (const T&);
- @\addedConcepts{requires HasDivideAssign<T>}@ valarray<T>& operator/= (const T&);
- @\addedConcepts{requires HasModulusAssign<T>}@ valarray<T>& operator%= (const T&);
- @\addedConcepts{requires HasPlusAssign<T>}@ valarray<T>& operator+= (const T&);
- @\addedConcepts{requires HasMinusAssign<T>}@ valarray<T>& operator-= (const T&);
- @\addedConcepts{requires HasBitXorAssign<T>}@ valarray<T>& operator^= (const T&);
- @\addedConcepts{requires HasBitAndAssign<T>}@ valarray<T>& operator&= (const T&);
- @\addedConcepts{requires HasBitOrAssign<T>}@ valarray<T>& operator|= (const T&);
- @\addedConcepts{requires HasLeftShiftAssign<T>}@ valarray<T>& operator<<=(const T&);
- @\addedConcepts{requires HasRightShiftAssign<T>}@ valarray<T>& operator>>=(const T&);
-
- @\addedConcepts{requires HasMultiplyAssign<T>}@ valarray<T>& operator*= (const valarray<T>&);
- @\addedConcepts{requires HasDivideAssign<T>}@ valarray<T>& operator/= (const valarray<T>&);
- @\addedConcepts{requires HasModulusAssign<T>}@ valarray<T>& operator%= (const valarray<T>&);
- @\addedConcepts{requires HasPlusAssign<T>}@ valarray<T>& operator+= (const valarray<T>&);
- @\addedConcepts{requires HasMinusAssign<T>}@ valarray<T>& operator-= (const valarray<T>&);
- @\addedConcepts{requires HasBitXorAssign<T>}@ valarray<T>& operator^= (const valarray<T>&);
- @\addedConcepts{requires HasBitOrAssign<T>}@ valarray<T>& operator|= (const valarray<T>&);
- @\addedConcepts{requires HasBitAndAssign<T>}@ valarray<T>& operator&= (const valarray<T>&);
- @\addedConcepts{requires HasLeftShiftAssign<T>}@ valarray<T>& operator<<=(const valarray<T>&);
- @\addedConcepts{requires HasRightShiftAssign<T>}@ valarray<T>& operator>>=(const valarray<T>&);
+ @\addedConcepts{requires HasMultiplyAssign<T, const T\&>}@ valarray<T>& operator*= (const T&);
+ @\addedConcepts{requires HasDivideAssign<T, const T\&>}@ valarray<T>& operator/= (const T&);
+ @\addedConcepts{requires HasModulusAssign<T, const T\&>}@ valarray<T>& operator%= (const T&);
+ @\addedConcepts{requires HasPlusAssign<T, const T\&>}@ valarray<T>& operator+= (const T&);
+ @\addedConcepts{requires HasMinusAssign<T, const T\&>}@ valarray<T>& operator-= (const T&);
+ @\addedConcepts{requires HasBitXorAssign<T, const T\&>}@ valarray<T>& operator^= (const T&);
+ @\addedConcepts{requires HasBitAndAssign<T, const T\&>}@ valarray<T>& operator&= (const T&);
+ @\addedConcepts{requires HasBitOrAssign<T, const T\&>}@ valarray<T>& operator|= (const T&);
+ @\addedConcepts{requires HasLeftShiftAssign<T, const T\&>}@ valarray<T>& operator<<=(const T&);
+ @\addedConcepts{requires HasRightShiftAssign<T, const T\&>}@ valarray<T>& operator>>=(const T&);
+
+ @\addedConcepts{requires HasMultiplyAssign<T, const T\&>}@ valarray<T>& operator*= (const valarray<T>&);
+ @\addedConcepts{requires HasDivideAssign<T, const T\&>}@ valarray<T>& operator/= (const valarray<T>&);
+ @\addedConcepts{requires HasModulusAssign<T, const T\&>}@ valarray<T>& operator%= (const valarray<T>&);
+ @\addedConcepts{requires HasPlusAssign<T, const T\&>}@ valarray<T>& operator+= (const valarray<T>&);
+ @\addedConcepts{requires HasMinusAssign<T, const T\&>}@ valarray<T>& operator-= (const valarray<T>&);
+ @\addedConcepts{requires HasBitXorAssign<T, const T\&>}@ valarray<T>& operator^= (const valarray<T>&);
+ @\addedConcepts{requires HasBitOrAssign<T, const T\&>}@ valarray<T>& operator|= (const valarray<T>&);
+ @\addedConcepts{requires HasBitAndAssign<T, const T\&>}@ valarray<T>& operator&= (const valarray<T>&);
+ @\addedConcepts{requires HasLeftShiftAssign<T, const T\&>}@ valarray<T>& operator<<=(const valarray<T>&);
+ @\addedConcepts{requires HasRightShiftAssign<T, const T\&>}@ valarray<T>& operator>>=(const valarray<T>&);
 
     // \ref{valarray.members} member functions:
     @\addedD{void swap(valarray\&\&);}@
 
     size_t size() const;
 
- @\addedConcepts{requires HasPlusAssign<T>}@ T sum() const;
+ @\addedConcepts{requires HasPlusAssign<T, const T\&>}@ T sum() const;
     @\addedConcepts{requires LessThanComparable<T>}@ T min() const;
     @\addedConcepts{requires LessThanComparable<T>}@ T max() const;
 
@@ -2179,11 +2173,11 @@
 \index{operator\~{}@\tcode{operator\~{}}!\tcode{valarray}}%
 \index{operator"!@\tcode{operator"!}!\tcode{valarray}}%
 \begin{itemdecl}
-@\addedConcepts{requires HasUnaryPlus<T> \&\& Convertible<T::result_type, T>}@
+@\addedConcepts{requires HasUnaryPlus<T> \&\& Convertible<HasUnaryPlus<T>::result_type, T>}@
   valarray<T> operator+() const;
-@\addedConcepts{requires HasNegate<T> \&\& Convertible<T::result_type, T>}@
+@\addedConcepts{requires HasNegate<T> \&\& Convertible<HasNegate<T>::result_type, T>}@
   valarray<T> operator-() const;
-@\addedConcepts{requires HasComplement<T> \&\& Convertible<T::result_type, T>}@
+@\addedConcepts{requires HasComplement<T> \&\& Convertible<HasComplement<T>::result_type, T>}@
   valarray<T> operator~() const;
 @\addedConcepts{requires HasLogicalNot<T>}@ valarray<bool> operator!() const;
 \end{itemdecl}
@@ -2216,16 +2210,16 @@
 \index{operator<<=@\tcode{operator\shl=}!valarray@\tcode{valarray}}%
 \index{operator>>=@\tcode{operator\shr=}!valarray@\tcode{valarray}}%
 \begin{itemdecl}
-@\addedConcepts{requires HasMultiplyAssign<T>}@ valarray<T>& operator*= (const valarray<T>&);
-@\addedConcepts{requires HasDivideAssign<T>}@ valarray<T>& operator/= (const valarray<T>&);
-@\addedConcepts{requires HasModulusAssign<T>}@ valarray<T>& operator%= (const valarray<T>&);
-@\addedConcepts{requires HasPlusAssign<T>}@ valarray<T>& operator+= (const valarray<T>&);
-@\addedConcepts{requires HasMinusAssign<T>}@ valarray<T>& operator-= (const valarray<T>&);
-@\addedConcepts{requires HasBitXorAssign<T>}@ valarray<T>& operator^= (const valarray<T>&);
-@\addedConcepts{requires HasBitAndAssign<T>}@ valarray<T>& operator&= (const valarray<T>&);
-@\addedConcepts{requires HasBitOrAssign<T>}@ valarray<T>& operator|= (const valarray<T>&);
-@\addedConcepts{requires HasLeftShiftAssign<T>}@ valarray<T>& operator<<=(const valarray<T>&);
-@\addedConcepts{requires HasRightShiftAssign<T>}@ valarray<T>& operator>>=(const valarray<T>&);
+@\addedConcepts{requires HasMultiplyAssign<T, const T\&>}@ valarray<T>& operator*= (const valarray<T>&);
+@\addedConcepts{requires HasDivideAssign<T, const T\&>}@ valarray<T>& operator/= (const valarray<T>&);
+@\addedConcepts{requires HasModulusAssign<T, const T\&>}@ valarray<T>& operator%= (const valarray<T>&);
+@\addedConcepts{requires HasPlusAssign<T, const T\&>}@ valarray<T>& operator+= (const valarray<T>&);
+@\addedConcepts{requires HasMinusAssign<T, const T\&>}@ valarray<T>& operator-= (const valarray<T>&);
+@\addedConcepts{requires HasBitXorAssign<T, const T\&>}@ valarray<T>& operator^= (const valarray<T>&);
+@\addedConcepts{requires HasBitAndAssign<T, const T\&>}@ valarray<T>& operator&= (const valarray<T>&);
+@\addedConcepts{requires HasBitOrAssign<T, const T\&>}@ valarray<T>& operator|= (const valarray<T>&);
+@\addedConcepts{requires HasLeftShiftAssign<T, const T\&>}@ valarray<T>& operator<<=(const valarray<T>&);
+@\addedConcepts{requires HasRightShiftAssign<T, const T\&>}@ valarray<T>& operator>>=(const valarray<T>&);
 \end{itemdecl}
 
 \begin{itemdescr}
@@ -2253,16 +2247,16 @@
 \end{itemdescr}
 
 \begin{itemdecl}
-@\addedConcepts{requires HasMultiplyAssign<T>}@ valarray<T>& operator*= (const T&);
-@\addedConcepts{requires HasDivideAssign<T>}@ valarray<T>& operator/= (const T&);
-@\addedConcepts{requires HasModulusAssign<T>}@ valarray<T>& operator%= (const T&);
-@\addedConcepts{requires HasPlusAssign<T>}@ valarray<T>& operator+= (const T&);
-@\addedConcepts{requires HasMinusAssign<T>}@ valarray<T>& operator-= (const T&);
-@\addedConcepts{requires HasBitXorAssign<T>}@ valarray<T>& operator^= (const T&);
-@\addedConcepts{requires HasBitAndAssign<T>}@ valarray<T>& operator&= (const T&);
-@\addedConcepts{requires HasBitOrAssign<T>}@ valarray<T>& operator|= (const T&);
-@\addedConcepts{requires HasLeftShiftAssign<T>}@ valarray<T>& operator<<=(const T&);
-@\addedConcepts{requires HasRightShiftAssign<T>}@ valarray<T>& operator>>=(const T&);
+@\addedConcepts{requires HasMultiplyAssign<T, const T\&>}@ valarray<T>& operator*= (const T&);
+@\addedConcepts{requires HasDivideAssign<T, const T\&>}@ valarray<T>& operator/= (const T&);
+@\addedConcepts{requires HasModulusAssign<T, const T\&>}@ valarray<T>& operator%= (const T&);
+@\addedConcepts{requires HasPlusAssign<T, const T\&>}@ valarray<T>& operator+= (const T&);
+@\addedConcepts{requires HasMinusAssign<T, const T\&>}@ valarray<T>& operator-= (const T&);
+@\addedConcepts{requires HasBitXorAssign<T, const T\&>}@ valarray<T>& operator^= (const T&);
+@\addedConcepts{requires HasBitAndAssign<T, const T\&>}@ valarray<T>& operator&= (const T&);
+@\addedConcepts{requires HasBitOrAssign<T, const T\&>}@ valarray<T>& operator|= (const T&);
+@\addedConcepts{requires HasLeftShiftAssign<T, const T\&>}@ valarray<T>& operator<<=(const T&);
+@\addedConcepts{requires HasRightShiftAssign<T, const T\&>}@ valarray<T>& operator>>=(const T&);
 \end{itemdecl}
 
 \begin{itemdescr}
@@ -2314,7 +2308,7 @@
 
 \index{sum@\tcode{sum}!valarray@\tcode{valarray}}%
 \begin{itemdecl}
-@\addedConcepts{requires HasPlusAssign<T>}@ T sum() const;
+@\addedConcepts{requires HasPlusAssign<T, const T\&>}@ T sum() const;
 \end{itemdecl}
 
 \begin{itemdescr}
@@ -2466,34 +2460,34 @@
 \index{operator||@\tcode{operator||}!valarray@\tcode{valarray}}%
 \begin{itemdecl}
 template<class T>
- @\addedConcepts{requires HasMultiply<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasMultiply<T, T> \&\& Convertible<HasMultiply<T, T>::result_type, T>}@
   valarray<T> operator*(const valarray<T>&, const valarray<T>&);
 template<class T>
- @\addedConcepts{requires HasDivide<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasDivide<T, T> \&\& Convertible<HasDivide<T, T>::result_type, T>}@
   valarray<T> operator/(const valarray<T>&, const valarray<T>&);
 template<class T>
- @\addedConcepts{requires HasModulus<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasModulus<T, T> \&\& Convertible<HasModulus<T, T>::result_type, T>}@
   valarray<T> operator%(const valarray<T>&, const valarray<T>&);
 template<class T>
- @\addedConcepts{requires HasPlus<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasPlus<T, T> \&\& Convertible<HasPlus<T, T>::result_type, T>}@
   valarray<T> operator+(const valarray<T>&, const valarray<T>&);
 template<class T>
- @\addedConcepts{requires HasMinus<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasMinus<T, T> \&\& Convertible<HasMinus<T, T>::result_type, T>}@
   valarray<T> operator-(const valarray<T>&, const valarray<T>&);
 template<class T>
- @\addedConcepts{requires HasBitXor<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasBitXor<T, T> \&\& Convertible<HasBitXor<T, T>::result_type, T>}@
   valarray<T> operator^(const valarray<T>&, const valarray<T>&);
 template<class T>
- @\addedConcepts{requires HasBitAnd<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasBitAnd<T, T> \&\& Convertible<HasBitAnd<T, T>::result_type, T>}@
   valarray<T> operator&(const valarray<T>&, const valarray<T>&);
 template<class T>
- @\addedConcepts{requires HasBitOr<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasBitOr<T, T> \&\& Convertible<HasBitOr<T, T>::result_type, T>}@
   valarray<T> operator|(const valarray<T>&, const valarray<T>&);
 template<class T>
- @\addedConcepts{requires HasLeftShift<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasLeftShift<T, T> \&\& Convertible<HasLeftShift<T, T>::result_type, T>}@
   valarray<T> operator<<(const valarray<T>&, const valarray<T>&);
 template<class T>
- @\addedConcepts{requires HasRightShift<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasRightShift<T, T> \&\& Convertible<HasRightShift<T, T>::result_type, T>}@
   valarray<T> operator>>(const valarray<T>&, const valarray<T>&);
 \end{itemdecl}
 
@@ -2518,64 +2512,64 @@
 
 \begin{itemdecl}
 template<class T>
- @\addedConcepts{requires HasMultiply<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasMultiply<T, T> \&\& Convertible<HasMultiply<T, T>::result_type, T>}@
   valarray<T> operator* (const valarray<T>&, const T&);
 template<class T>
- @\addedConcepts{requires HasMultiply<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasMultiply<T, T> \&\& Convertible<HasMultiply<T, T>::result_type, T>}@
   valarray<T> operator* (const T&, const valarray<T>&);
 template<class T>
- @\addedConcepts{requires HasDivide<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasDivide<T, T> \&\& Convertible<HasDivide<T, T>::result_type, T>}@
   valarray<T> operator/ (const valarray<T>&, const T&);
 template<class T>
- @\addedConcepts{requires HasDivide<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasDivide<T, T> \&\& Convertible<HasDivide<T, T>::result_type, T>}@
   valarray<T> operator/ (const T&, const valarray<T>&);
 template<class T>
- @\addedConcepts{requires HasModulus<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasModulus<T, T> \&\& Convertible<HasModulus<T, T>::result_type, T>}@
   valarray<T> operator% (const valarray<T>&, const T&);
 template<class T>
- @\addedConcepts{requires HasModulus<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasModulus<T, T> \&\& Convertible<HasModulus<T, T>::result_type, T>}@
   valarray<T> operator% (const T&, const valarray<T>&);
 template<class T>
- @\addedConcepts{requires HasPlus<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasPlus<T, T> \&\& Convertible<HasPlus<T, T>::result_type, T>}@
   valarray<T> operator+ (const valarray<T>&, const T&);
 template<class T>
- @\addedConcepts{requires HasPlus<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasPlus<T, T> \&\& Convertible<HasPlus<T, T>::result_type, T>}@
   valarray<T> operator+ (const T&, const valarray<T>&);
 template<class T>
- @\addedConcepts{requires HasMinus<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasMinus<T, T> \&\& Convertible<HasMinus<T, T>::result_type, T>}@
   valarray<T> operator- (const valarray<T>&, const T&);
 template<class T>
- @\addedConcepts{requires HasMinus<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasMinus<T, T> \&\& Convertible<HasMinus<T, T>::result_type, T>}@
   valarray<T> operator- (const T&, const valarray<T>&);
 template<class T>
- @\addedConcepts{requires HasBitXor<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasBitXor<T, T> \&\& Convertible<HasBitXor<T, T>::result_type, T>}@
   valarray<T> operator^ (const valarray<T>&, const T&);
 template<class T>
- @\addedConcepts{requires HasBitXor<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasBitXor<T, T> \&\& Convertible<HasBitXor<T, T>::result_type, T>}@
   valarray<T> operator^ (const T&, const valarray<T>&);
 template<class T>
- @\addedConcepts{requires HasBitAnd<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasBitAnd<T, T> \&\& Convertible<HasBitAnd<T, T>::result_type, T>}@
   valarray<T> operator& (const valarray<T>&, const T&);
 template<class T>
- @\addedConcepts{requires HasBitAnd<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasBitAnd<T, T> \&\& Convertible<HasBitAnd<T, T>::result_type, T>}@
   valarray<T> operator& (const T&, const valarray<T>&);
 template<class T>
- @\addedConcepts{requires HasBitOr<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasBitOr<T, T> \&\& Convertible<HasBitOr<T, T>::result_type, T>}@
   valarray<T> operator| (const valarray<T>&, const T&);
 template<class T>
- @\addedConcepts{requires HasBitOr<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasBitOr<T, T> \&\& Convertible<HasBitOr<T, T>::result_type, T>}@
   valarray<T> operator| (const T&, const valarray<T>&);
 template<class T>
- @\addedConcepts{requires HasLeftShift<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasLeftShift<T, T> \&\& Convertible<HasLeftShift<T, T>::result_type, T>}@
   valarray<T> operator<<(const valarray<T>&, const T&);
 template<class T>
- @\addedConcepts{requires HasLeftShift<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasLeftShift<T, T> \&\& Convertible<HasLeftShift<T, T>::result_type, T>}@
   valarray<T> operator<<(const T&, const valarray<T>&);
 template<class T>
- @\addedConcepts{requires HasRightShift<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasRightShift<T, T> \&\& Convertible<HasRightShift<T, T>::result_type, T>}@
   valarray<T> operator>>(const valarray<T>&, const T&);
 template<class T>
- @\addedConcepts{requires HasRightShift<T> \&\& Convertible<T::result_type, T>}@
+ @\addedConcepts{requires HasRightShift<T, T> \&\& Convertible<HasRightShift<T, T>::result_type, T>}@
   valarray<T> operator>>(const T&, const valarray<T>&);
 \end{itemdecl}
 
@@ -2624,10 +2618,10 @@
   @\addedConcepts{requires LessThanComparable<T>}@
   valarray<bool> operator>=(const valarray<T>&, const valarray<T>&);
 template<class T>
- @\addedConcepts{requires HasLogicalAnd<T>}@
+ @\addedConcepts{requires HasLogicalAnd<T, T>}@
   valarray<bool> operator&&(const valarray<T>&, const valarray<T>&);
 template<class T>
- @\addedConcepts{requires HasLogicalOr<T>}@
+ @\addedConcepts{requires HasLogicalOr<T, T>}@
   valarray<bool> operator||(const valarray<T>&, const valarray<T>&);
 \end{itemdecl}
 
@@ -2689,16 +2683,16 @@
   @\addedConcepts{requires LessThanComparable<T>}@
   valarray<bool> operator>=(const T&, const valarray<T>&);
 template<class T>
- @\addedConcepts{requires HasLogicalAnd<T>}@
+ @\addedConcepts{requires HasLogicalAnd<T, T>}@
   valarray<bool> operator&&(const valarray<T>&, const T&);
 template<class T>
- @\addedConcepts{requires HasLogicalAnd<T>}@
+ @\addedConcepts{requires HasLogicalAnd<T, T>}@
   valarray<bool> operator&&(const T&, const valarray<T>&);
 template<class T>
- @\addedConcepts{requires HasLogicalOr<T>}@
+ @\addedConcepts{requires HasLogicalOr<T, T>}@
   valarray<bool> operator||(const valarray<T>&, const T&);
 template<class T>
- @\addedConcepts{requires HasLogicalOr<T>}@
+ @\addedConcepts{requires HasLogicalOr<T, T>}@
   valarray<bool> operator||(const T&, const valarray<T>&);
 \end{itemdecl}
 
@@ -2797,16 +2791,16 @@
     typedef T value_type;
 
     void operator= (const valarray<T>&) const;
- @\addedConcepts{requires HasMultiplyAssign<T>}@ void operator*= (const valarray<T>&) const;
- @\addedConcepts{requires HasDivideAssign<T>}@ void operator/= (const valarray<T>&) const;
- @\addedConcepts{requires HasModulusAssign<T>}@ void operator%= (const valarray<T>&) const;
- @\addedConcepts{requires HasPlusAssign<T>}@ void operator+= (const valarray<T>&) const;
- @\addedConcepts{requires HasMinusAssign<T>}@ void operator-= (const valarray<T>&) const;
- @\addedConcepts{requires HasBitXorAssign<T>}@ void operator^= (const valarray<T>&) const;
- @\addedConcepts{requires HasBitAndAssign<T>}@ void operator&= (const valarray<T>&) const;
- @\addedConcepts{requires HasBitOrAssign<T>}@ void operator|= (const valarray<T>&) const;
- @\addedConcepts{requires HasLeftShiftAssign<T>}@ void operator<<=(const valarray<T>&) const;
- @\addedConcepts{requires HasRightShiftAssign<T>}@ void operator>>=(const valarray<T>&) const;
+ @\addedConcepts{requires HasMultiplyAssign<T, const T\&>}@ void operator*= (const valarray<T>&) const;
+ @\addedConcepts{requires HasDivideAssign<T, const T\&>}@ void operator/= (const valarray<T>&) const;
+ @\addedConcepts{requires HasModulusAssign<T, const T\&>}@ void operator%= (const valarray<T>&) const;
+ @\addedConcepts{requires HasPlusAssign<T, const T\&>}@ void operator+= (const valarray<T>&) const;
+ @\addedConcepts{requires HasMinusAssign<T, const T\&>}@ void operator-= (const valarray<T>&) const;
+ @\addedConcepts{requires HasBitXorAssign<T, const T\&>}@ void operator^= (const valarray<T>&) const;
+ @\addedConcepts{requires HasBitAndAssign<T, const T\&>}@ void operator&= (const valarray<T>&) const;
+ @\addedConcepts{requires HasBitOrAssign<T, const T\&>}@ void operator|= (const valarray<T>&) const;
+ @\addedConcepts{requires HasLeftShiftAssign<T, const T\&>}@ void operator<<=(const valarray<T>&) const;
+ @\addedConcepts{requires HasRightShiftAssign<T, const T\&>}@ void operator>>=(const valarray<T>&) const;
 
     slice_array(const slice_array&);
    ~slice_array();
@@ -2892,16 +2886,16 @@
 \index{operator<<=@\tcode{operator\shl=}!\tcode{slice_array}}%
 \index{operator>>=@\tcode{operator\shr=}!\tcode{slice_array}}%
 \begin{itemdecl}
-@\addedConcepts{requires HasMultiplyAssign<T>}@ void operator*= (const valarray<T>&) const;
-@\addedConcepts{requires HasDivideAssign<T>}@ void operator/= (const valarray<T>&) const;
-@\addedConcepts{requires HasModulusAssign<T>}@ void operator%= (const valarray<T>&) const;
-@\addedConcepts{requires HasPlusAssign<T>}@ void operator+= (const valarray<T>&) const;
-@\addedConcepts{requires HasMinusAssign<T>}@ void operator-= (const valarray<T>&) const;
-@\addedConcepts{requires HasBitXorAssign<T>}@ void operator^= (const valarray<T>&) const;
-@\addedConcepts{requires HasBitAndAssign<T>}@ void operator&= (const valarray<T>&) const;
-@\addedConcepts{requires HasBitOrAssign<T>}@ void operator|= (const valarray<T>&) const;
-@\addedConcepts{requires HasLeftShiftAssign<T>}@ void operator<<=(const valarray<T>&) const;
-@\addedConcepts{requires HasRightShiftAssign<T>}@ void operator>>=(const valarray<T>&) const;
+@\addedConcepts{requires HasMultiplyAssign<T, const T\&>}@ void operator*= (const valarray<T>&) const;
+@\addedConcepts{requires HasDivideAssign<T, const T\&>}@ void operator/= (const valarray<T>&) const;
+@\addedConcepts{requires HasModulusAssign<T, const T\&>}@ void operator%= (const valarray<T>&) const;
+@\addedConcepts{requires HasPlusAssign<T, const T\&>}@ void operator+= (const valarray<T>&) const;
+@\addedConcepts{requires HasMinusAssign<T, const T\&>}@ void operator-= (const valarray<T>&) const;
+@\addedConcepts{requires HasBitXorAssign<T, const T\&>}@ void operator^= (const valarray<T>&) const;
+@\addedConcepts{requires HasBitAndAssign<T, const T\&>}@ void operator&= (const valarray<T>&) const;
+@\addedConcepts{requires HasBitOrAssign<T, const T\&>}@ void operator|= (const valarray<T>&) const;
+@\addedConcepts{requires HasLeftShiftAssign<T, const T\&>}@ void operator<<=(const valarray<T>&) const;
+@\addedConcepts{requires HasRightShiftAssign<T, const T\&>}@ void operator>>=(const valarray<T>&) const;
 \end{itemdecl}
 
 \begin{itemdescr}
@@ -2944,16 +2938,16 @@
     typedef T value_type;
 
     void operator= (const valarray<T>&) const;
- @\addedConcepts{requires HasMultiplyAssign<T>}@ void operator*= (const valarray<T>&) const;
- @\addedConcepts{requires HasDivideAssign<T>}@ void operator/= (const valarray<T>&) const;
- @\addedConcepts{requires HasModulusAssign<T>}@ void operator%= (const valarray<T>&) const;
- @\addedConcepts{requires HasPlusAssign<T>}@ void operator+= (const valarray<T>&) const;
- @\addedConcepts{requires HasMinusAssign<T>}@ void operator-= (const valarray<T>&) const;
- @\addedConcepts{requires HasBitXorAssign<T>}@ void operator^= (const valarray<T>&) const;
- @\addedConcepts{requires HasBitAndAssign<T>}@ void operator&= (const valarray<T>&) const;
- @\addedConcepts{requires HasBitOrAssign<T>}@ void operator|= (const valarray<T>&) const;
- @\addedConcepts{requires HasLeftShiftAssign<T>}@ void operator<<=(const valarray<T>&) const;
- @\addedConcepts{requires HasRightShiftAssign<T>}@ void operator>>=(const valarray<T>&) const;
+ @\addedConcepts{requires HasMultiplyAssign<T, const T\&>}@ void operator*= (const valarray<T>&) const;
+ @\addedConcepts{requires HasDivideAssign<T, const T\&>}@ void operator/= (const valarray<T>&) const;
+ @\addedConcepts{requires HasModulusAssign<T, const T\&>}@ void operator%= (const valarray<T>&) const;
+ @\addedConcepts{requires HasPlusAssign<T, const T\&>}@ void operator+= (const valarray<T>&) const;
+ @\addedConcepts{requires HasMinusAssign<T, const T\&>}@ void operator-= (const valarray<T>&) const;
+ @\addedConcepts{requires HasBitXorAssign<T, const T\&>}@ void operator^= (const valarray<T>&) const;
+ @\addedConcepts{requires HasBitAndAssign<T, const T\&>}@ void operator&= (const valarray<T>&) const;
+ @\addedConcepts{requires HasBitOrAssign<T, const T\&>}@ void operator|= (const valarray<T>&) const;
+ @\addedConcepts{requires HasLeftShiftAssign<T, const T\&>}@ void operator<<=(const valarray<T>&) const;
+ @\addedConcepts{requires HasRightShiftAssign<T, const T\&>}@ void operator>>=(const valarray<T>&) const;
 
     gslice_array(const gslice_array&);
    ~gslice_array();
@@ -3036,16 +3030,16 @@
 \index{operator<<=@\tcode{operator\shl=}!\tcode{gslice_array}}%
 \index{operator>>=@\tcode{operator\shr=}!\tcode{gslice_array}}%
 \begin{itemdecl}
-@\addedConcepts{requires HasMultiplyAssign<T>}@ void operator*= (const valarray<T>&) const;
-@\addedConcepts{requires HasDivideAssign<T>}@ void operator/= (const valarray<T>&) const;
-@\addedConcepts{requires HasModulusAssign<T>}@ void operator%= (const valarray<T>&) const;
-@\addedConcepts{requires HasPlusAssign<T>}@ void operator+= (const valarray<T>&) const;
-@\addedConcepts{requires HasMinusAssign<T>}@ void operator-= (const valarray<T>&) const;
-@\addedConcepts{requires HasBitXorAssign<T>}@ void operator^= (const valarray<T>&) const;
-@\addedConcepts{requires HasBitAndAssign<T>}@ void operator&= (const valarray<T>&) const;
-@\addedConcepts{requires HasBitOrAssign<T>}@ void operator|= (const valarray<T>&) const;
-@\addedConcepts{requires HasLeftShiftAssign<T>}@ void operator<<=(const valarray<T>&) const;
-@\addedConcepts{requires HasRightShiftAssign<T>}@ void operator>>=(const valarray<T>&) const;
+@\addedConcepts{requires HasMultiplyAssign<T, const T\&>}@ void operator*= (const valarray<T>&) const;
+@\addedConcepts{requires HasDivideAssign<T, const T\&>}@ void operator/= (const valarray<T>&) const;
+@\addedConcepts{requires HasModulusAssign<T, const T\&>}@ void operator%= (const valarray<T>&) const;
+@\addedConcepts{requires HasPlusAssign<T, const T\&>}@ void operator+= (const valarray<T>&) const;
+@\addedConcepts{requires HasMinusAssign<T, const T\&>}@ void operator-= (const valarray<T>&) const;
+@\addedConcepts{requires HasBitXorAssign<T, const T\&>}@ void operator^= (const valarray<T>&) const;
+@\addedConcepts{requires HasBitAndAssign<T, const T\&>}@ void operator&= (const valarray<T>&) const;
+@\addedConcepts{requires HasBitOrAssign<T, const T\&>}@ void operator|= (const valarray<T>&) const;
+@\addedConcepts{requires HasLeftShiftAssign<T, const T\&>}@ void operator<<=(const valarray<T>&) const;
+@\addedConcepts{requires HasRightShiftAssign<T, const T\&>}@ void operator>>=(const valarray<T>&) const;
 \end{itemdecl}
 
 \begin{itemdescr}
@@ -3086,16 +3080,16 @@
     typedef T value_type;
 
     void operator= (const valarray<T>&) const;
- @\addedConcepts{requires HasMultiplyAssign<T>}@ void operator*= (const valarray<T>&) const;
- @\addedConcepts{requires HasDivideAssign<T>}@ void operator/= (const valarray<T>&) const;
- @\addedConcepts{requires HasModulusAssign<T>}@ void operator%= (const valarray<T>&) const;
- @\addedConcepts{requires HasPlusAssign<T>}@ void operator+= (const valarray<T>&) const;
- @\addedConcepts{requires HasMinusAssign<T>}@ void operator-= (const valarray<T>&) const;
- @\addedConcepts{requires HasBitXorAssign<T>}@ void operator^= (const valarray<T>&) const;
- @\addedConcepts{requires HasBitAndAssign<T>}@ void operator&= (const valarray<T>&) const;
- @\addedConcepts{requires HasBitOrAssign<T>}@ void operator|= (const valarray<T>&) const;
- @\addedConcepts{requires HasLeftShiftAssign<T>}@ void operator<<=(const valarray<T>&) const;
- @\addedConcepts{requires HasRightShiftAssign<T>}@ void operator>>=(const valarray<T>&) const;
+ @\addedConcepts{requires HasMultiplyAssign<T, const T\&>}@ void operator*= (const valarray<T>&) const;
+ @\addedConcepts{requires HasDivideAssign<T, const T\&>}@ void operator/= (const valarray<T>&) const;
+ @\addedConcepts{requires HasModulusAssign<T, const T\&>}@ void operator%= (const valarray<T>&) const;
+ @\addedConcepts{requires HasPlusAssign<T, const T\&>}@ void operator+= (const valarray<T>&) const;
+ @\addedConcepts{requires HasMinusAssign<T, const T\&>}@ void operator-= (const valarray<T>&) const;
+ @\addedConcepts{requires HasBitXorAssign<T, const T\&>}@ void operator^= (const valarray<T>&) const;
+ @\addedConcepts{requires HasBitAndAssign<T, const T\&>}@ void operator&= (const valarray<T>&) const;
+ @\addedConcepts{requires HasBitOrAssign<T, const T\&>}@ void operator|= (const valarray<T>&) const;
+ @\addedConcepts{requires HasLeftShiftAssign<T, const T\&>}@ void operator<<=(const valarray<T>&) const;
+ @\addedConcepts{requires HasRightShiftAssign<T, const T\&>}@ void operator>>=(const valarray<T>&) const;
 
     mask_array(const mask_array&);
    ~mask_array();
@@ -3173,16 +3167,16 @@
 \index{operator<<=@\tcode{operator\shl=}!\tcode{mask_array}}%
 \index{operator>>=@\tcode{operator\shr=}!\tcode{mask_array}}%
 \begin{itemdecl}
-@\addedConcepts{requires HasMultiplyAssign<T>}@ void operator*= (const valarray<T>&) const;
-@\addedConcepts{requires HasDivideAssign<T>}@ void operator/= (const valarray<T>&) const;
-@\addedConcepts{requires HasModulusAssign<T>}@ void operator%= (const valarray<T>&) const;
-@\addedConcepts{requires HasPlusAssign<T>}@ void operator+= (const valarray<T>&) const;
-@\addedConcepts{requires HasMinusAssign<T>}@ void operator-= (const valarray<T>&) const;
-@\addedConcepts{requires HasBitXorAssign<T>}@ void operator^= (const valarray<T>&) const;
-@\addedConcepts{requires HasBitAndAssign<T>}@ void operator&= (const valarray<T>&) const;
-@\addedConcepts{requires HasBitOrAssign<T>}@ void operator|= (const valarray<T>&) const;
-@\addedConcepts{requires HasLeftShiftAssign<T>}@ void operator<<=(const valarray<T>&) const;
-@\addedConcepts{requires HasRightShiftAssign<T>}@ void operator>>=(const valarray<T>&) const;
+@\addedConcepts{requires HasMultiplyAssign<T, const T\&>}@ void operator*= (const valarray<T>&) const;
+@\addedConcepts{requires HasDivideAssign<T, const T\&>}@ void operator/= (const valarray<T>&) const;
+@\addedConcepts{requires HasModulusAssign<T, const T\&>}@ void operator%= (const valarray<T>&) const;
+@\addedConcepts{requires HasPlusAssign<T, const T\&>}@ void operator+= (const valarray<T>&) const;
+@\addedConcepts{requires HasMinusAssign<T, const T\&>}@ void operator-= (const valarray<T>&) const;
+@\addedConcepts{requires HasBitXorAssign<T, const T\&>}@ void operator^= (const valarray<T>&) const;
+@\addedConcepts{requires HasBitAndAssign<T, const T\&>}@ void operator&= (const valarray<T>&) const;
+@\addedConcepts{requires HasBitOrAssign<T, const T\&>}@ void operator|= (const valarray<T>&) const;
+@\addedConcepts{requires HasLeftShiftAssign<T, const T\&>}@ void operator<<=(const valarray<T>&) const;
+@\addedConcepts{requires HasRightShiftAssign<T, const T\&>}@ void operator>>=(const valarray<T>&) const;
 \end{itemdecl}
 
 \begin{itemdescr}
@@ -3221,16 +3215,16 @@
     typedef T value_type;
 
     void operator= (const valarray<T>&) const;
- @\addedConcepts{requires HasMultiplyAssign<T>}@ void operator*= (const valarray<T>&) const;
- @\addedConcepts{requires HasDivideAssign<T>}@ void operator/= (const valarray<T>&) const;
- @\addedConcepts{requires HasModulusAssign<T>}@ void operator%= (const valarray<T>&) const;
- @\addedConcepts{requires HasPlusAssign<T>}@ void operator+= (const valarray<T>&) const;
- @\addedConcepts{requires HasMinusAssign<T>}@ void operator-= (const valarray<T>&) const;
- @\addedConcepts{requires HasBitXorAssign<T>}@ void operator^= (const valarray<T>&) const;
- @\addedConcepts{requires HasBitAndAssign<T>}@ void operator&= (const valarray<T>&) const;
- @\addedConcepts{requires HasBitOrAssign<T>}@ void operator|= (const valarray<T>&) const;
- @\addedConcepts{requires HasLeftShiftAssign<T>}@ void operator<<=(const valarray<T>&) const;
- @\addedConcepts{requires HasRightShiftAssign<T>}@ void operator>>=(const valarray<T>&) const;
+ @\addedConcepts{requires HasMultiplyAssign<T, const T\&>}@ void operator*= (const valarray<T>&) const;
+ @\addedConcepts{requires HasDivideAssign<T, const T\&>}@ void operator/= (const valarray<T>&) const;
+ @\addedConcepts{requires HasModulusAssign<T, const T\&>}@ void operator%= (const valarray<T>&) const;
+ @\addedConcepts{requires HasPlusAssign<T, const T\&>}@ void operator+= (const valarray<T>&) const;
+ @\addedConcepts{requires HasMinusAssign<T, const T\&>}@ void operator-= (const valarray<T>&) const;
+ @\addedConcepts{requires HasBitXorAssign<T, const T\&>}@ void operator^= (const valarray<T>&) const;
+ @\addedConcepts{requires HasBitAndAssign<T, const T\&>}@ void operator&= (const valarray<T>&) const;
+ @\addedConcepts{requires HasBitOrAssign<T, const T\&>}@ void operator|= (const valarray<T>&) const;
+ @\addedConcepts{requires HasLeftShiftAssign<T, const T\&>}@ void operator<<=(const valarray<T>&) const;
+ @\addedConcepts{requires HasRightShiftAssign<T, const T\&>}@ void operator>>=(const valarray<T>&) const;
 
     indirect_array(const indirect_array&);
    ~indirect_array();
@@ -3327,16 +3321,16 @@
 \index{operator<<=@\tcode{operator\shl=}!\tcode{indirect_array}}%
 \index{operator>>=@\tcode{operator\shr=}!\tcode{indirect_array}}%
 \begin{itemdecl}
-@\addedConcepts{requires HasMultiplyAssign<T>}@ void operator*= (const valarray<T>&) const;
-@\addedConcepts{requires HasDivideAssign<T>}@ void operator/= (const valarray<T>&) const;
-@\addedConcepts{requires HasModulusAssign<T>}@ void operator%= (const valarray<T>&) const;
-@\addedConcepts{requires HasPlusAssign<T>}@ void operator+= (const valarray<T>&) const;
-@\addedConcepts{requires HasMinusAssign<T>}@ void operator-= (const valarray<T>&) const;
-@\addedConcepts{requires HasBitXorAssign<T>}@ void operator^= (const valarray<T>&) const;
-@\addedConcepts{requires HasBitAndAssign<T>}@ void operator&= (const valarray<T>&) const;
-@\addedConcepts{requires HasBitOrAssign<T>}@ void operator|= (const valarray<T>&) const;
-@\addedConcepts{requires HasLeftShiftAssign<T>}@ void operator<<=(const valarray<T>&) const;
-@\addedConcepts{requires HasRightShiftAssign<T>}@ void operator>>=(const valarray<T>&) const;
+@\addedConcepts{requires HasMultiplyAssign<T, const T\&>}@ void operator*= (const valarray<T>&) const;
+@\addedConcepts{requires HasDivideAssign<T, const T\&>}@ void operator/= (const valarray<T>&) const;
+@\addedConcepts{requires HasModulusAssign<T, const T\&>}@ void operator%= (const valarray<T>&) const;
+@\addedConcepts{requires HasPlusAssign<T, const T\&>}@ void operator+= (const valarray<T>&) const;
+@\addedConcepts{requires HasMinusAssign<T, const T\&>}@ void operator-= (const valarray<T>&) const;
+@\addedConcepts{requires HasBitXorAssign<T, const T\&>}@ void operator^= (const valarray<T>&) const;
+@\addedConcepts{requires HasBitAndAssign<T, const T\&>}@ void operator&= (const valarray<T>&) const;
+@\addedConcepts{requires HasBitOrAssign<T, const T\&>}@ void operator|= (const valarray<T>&) const;
+@\addedConcepts{requires HasLeftShiftAssign<T, const T\&>}@ void operator<<=(const valarray<T>&) const;
+@\addedConcepts{requires HasRightShiftAssign<T, const T\&>}@ void operator>>=(const valarray<T>&) const;
 \end{itemdecl}
 
 \begin{itemdescr}
@@ -3416,10 +3410,10 @@
                       BinaryOperation1 @\farg{binary_op1}@,
                       BinaryOperation2 @\farg{binary_op2}@);
   template <InputIterator InIter, OutputIterator<auto, const InIter::value_type&> OutIter>
- requires HasPlus<InIter::value_type, _InIter::reference>
+ requires HasPlus<InIter::value_type, InIter::reference>
           && HasAssign<InIter::value_type,
- HasPlus<InIter::value_type, _InIter::reference>::result_type>
- && Constructible<InIter::value_type, _InIter::reference>
+ HasPlus<InIter::value_type, InIter::reference>::result_type>
+ && Constructible<InIter::value_type, InIter::reference>
     OutIter partial_sum(InIter @\farg{first}@, InIter @\farg{last}@,
                             OutIter @\farg{result}@);
   template<InputIterator InIter, OutputIterator<auto, const InIter::value_type&> OutIter,
@@ -3438,7 +3432,7 @@
                                      OutIter @\farg{result}@);
   template <InputIterator InIter, OutputIterator<auto, const InIter::value_type&> OutIter,
             Callable<auto, const InIter::value_type&, const InIter::value_type&> BinaryOperation>
- requires Constructible<_InIter::value_type, _InIter::reference>
+ requires Constructible<InIter::value_type, InIter::reference>
           && OutputIterator<OutIter, BinaryOperation::result_type>
           && MoveAssignable<InIter::value_type>
           && CopyConstructible<BinaryOperation>
@@ -3577,10 +3571,10 @@
 \color{addclr}
 \begin{itemdecl}
 template <InputIterator InIter, OutputIterator<auto, const InIter::value_type&> OutIter>
- requires HasPlus<InIter::value_type, _InIter::reference>
+ requires HasPlus<InIter::value_type, InIter::reference>
         && HasAssign<InIter::value_type,
- HasPlus<InIter::value_type, _InIter::reference>::result_type>
- && Constructible<InIter::value_type, _InIter::reference>
+ HasPlus<InIter::value_type, InIter::reference>::result_type>
+ && Constructible<InIter::value_type, InIter::reference>
   OutIter partial_sum(InIter @\farg{first}@, InIter @\farg{last}@,
                         OutIter @\farg{result}@);
 template<InputIterator InIter, OutputIterator<auto, const InIter::value_type&> OutIter,
@@ -3657,7 +3651,7 @@
                                  OutIter @\farg{result}@);
 template <InputIterator InIter, OutputIterator<auto, const InIter::value_type&> OutIter,
           Callable<auto, const InIter::value_type&, const InIter::value_type&> BinaryOperation>
- requires Constructible<_InIter::value_type, _InIter::reference>
+ requires Constructible<InIter::value_type, InIter::reference>
         && OutputIterator<OutIter, BinaryOperation::result_type>
         && MoveAssignable<InIter::value_type>
         && CopyConstructible<BinaryOperation>
@@ -3745,7 +3739,7 @@
 
 \section*{Acknowledgments}
 Daniel Kr\"ugler provided conceptualized
-versions of \tcode{iota} in N2666.
+versions of \tcode{iota} in N2666
 
 \bibliographystyle{plain}
 \bibliography{local}


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk