Created on 2018-02-28.00:00:00 last changed 45 months ago
Proposed resolution:
This wording is relative to N4727.
Edit [valarray.syn], header <valarray> synopsis, as indicated:
[…] template<class T> valarray<T> operator* (const valarray<T>&, const valarray<T>&); template<class T> valarray<T> operator* (const valarray<T>&, constTtypename valarray<T>::value_type&); template<class T> valarray<T> operator* (constTtypename valarray<T>::value_type&, const valarray<T>&); template<class T> valarray<T> operator/ (const valarray<T>&, const valarray<T>&); template<class T> valarray<T> operator/ (const valarray<T>&, constTtypename valarray<T>::value_type&); template<class T> valarray<T> operator/ (constTtypename valarray<T>::value_type&, const valarray<T>&); template<class T> valarray<T> operator% (const valarray<T>&, const valarray<T>&); template<class T> valarray<T> operator% (const valarray<T>&, constTtypename valarray<T>::value_type&); template<class T> valarray<T> operator% (constTtypename valarray<T>::value_type&, const valarray<T>&); template<class T> valarray<T> operator+ (const valarray<T>&, const valarray<T>&); template<class T> valarray<T> operator+ (const valarray<T>&, constTtypename valarray<T>::value_type&); template<class T> valarray<T> operator+ (constTtypename valarray<T>::value_type&, const valarray<T>&); template<class T> valarray<T> operator- (const valarray<T>&, const valarray<T>&); template<class T> valarray<T> operator- (const valarray<T>&, constTtypename valarray<T>::value_type&); template<class T> valarray<T> operator- (constTtypename valarray<T>::value_type&, const valarray<T>&); template<class T> valarray<T> operator^ (const valarray<T>&, const valarray<T>&); template<class T> valarray<T> operator^ (const valarray<T>&, constTtypename valarray<T>::value_type&); template<class T> valarray<T> operator^ (constTtypename valarray<T>::value_type&, const valarray<T>&); template<class T> valarray<T> operator& (const valarray<T>&, const valarray<T>&); template<class T> valarray<T> operator& (const valarray<T>&, constTtypename valarray<T>::value_type&); template<class T> valarray<T> operator& (constTtypename valarray<T>::value_type&, const valarray<T>&); template<class T> valarray<T> operator| (const valarray<T>&, const valarray<T>&); template<class T> valarray<T> operator| (const valarray<T>&, constTtypename valarray<T>::value_type&); template<class T> valarray<T> operator| (constTtypename valarray<T>::value_type&, const valarray<T>&); template<class T> valarray<T> operator<<(const valarray<T>&, const valarray<T>&); template<class T> valarray<T> operator<<(const valarray<T>&, constTtypename valarray<T>::value_type&); template<class T> valarray<T> operator<<(constTtypename valarray<T>::value_type&, const valarray<T>&); template<class T> valarray<T> operator>>(const valarray<T>&, const valarray<T>&); template<class T> valarray<T> operator>>(const valarray<T>&, constTtypename valarray<T>::value_type&); template<class T> valarray<T> operator>>(constTtypename valarray<T>::value_type&, const valarray<T>&); template<class T> valarray<bool> operator&&(const valarray<T>&, const valarray<T>&); template<class T> valarray<bool> operator&&(const valarray<T>&, constTtypename valarray<T>::value_type&); template<class T> valarray<bool> operator&&(constTtypename valarray<T>::value_type&, const valarray<T>&); template<class T> valarray<bool> operator||(const valarray<T>&, const valarray<T>&); template<class T> valarray<bool> operator||(const valarray<T>&, constTtypename valarray<T>::value_type&); template<class T> valarray<bool> operator||(constTtypename valarray<T>::value_type&, const valarray<T>&); template<class T> valarray<bool> operator==(const valarray<T>&, const valarray<T>&); template<class T> valarray<bool> operator==(const valarray<T>&, constTtypename valarray<T>::value_type&); template<class T> valarray<bool> operator==(constTtypename valarray<T>::value_type&, const valarray<T>&); template<class T> valarray<bool> operator!=(const valarray<T>&, const valarray<T>&); template<class T> valarray<bool> operator!=(const valarray<T>&, constTtypename valarray<T>::value_type&); template<class T> valarray<bool> operator!=(constTtypename valarray<T>::value_type&, const valarray<T>&); template<class T> valarray<bool> operator< (const valarray<T>&, const valarray<T>&); template<class T> valarray<bool> operator< (const valarray<T>&, constTtypename valarray<T>::value_type&); template<class T> valarray<bool> operator< (constTtypename valarray<T>::value_type&, const valarray<T>&); template<class T> valarray<bool> operator> (const valarray<T>&, const valarray<T>&); template<class T> valarray<bool> operator> (const valarray<T>&, constTtypename valarray<T>::value_type&); template<class T> valarray<bool> operator> (constTtypename valarray<T>::value_type&, const valarray<T>&); template<class T> valarray<bool> operator<=(const valarray<T>&, const valarray<T>&); template<class T> valarray<bool> operator<=(const valarray<T>&, constTtypename valarray<T>::value_type&); template<class T> valarray<bool> operator<=(constTtypename valarray<T>::value_type&, const valarray<T>&); template<class T> valarray<bool> operator>=(const valarray<T>&, const valarray<T>&); template<class T> valarray<bool> operator>=(const valarray<T>&, constTtypename valarray<T>::value_type&); template<class T> valarray<bool> operator>=(constTtypename valarray<T>::value_type&, const valarray<T>&); template<class T> valarray<T> abs (const valarray<T>&); template<class T> valarray<T> acos (const valarray<T>&); template<class T> valarray<T> asin (const valarray<T>&); template<class T> valarray<T> atan (const valarray<T>&); template<class T> valarray<T> atan2(const valarray<T>&, const valarray<T>&); template<class T> valarray<T> atan2(const valarray<T>&, constTtypename valarray<T>::value_type&); template<class T> valarray<T> atan2(constTtypename valarray<T>::value_type&, const valarray<T>&); template<class T> valarray<T> cos (const valarray<T>&); template<class T> valarray<T> cosh (const valarray<T>&); template<class T> valarray<T> exp (const valarray<T>&); template<class T> valarray<T> log (const valarray<T>&); template<class T> valarray<T> log10(const valarray<T>&); template<class T> valarray<T> pow(const valarray<T>&, const valarray<T>&); template<class T> valarray<T> pow(const valarray<T>&, constTtypename valarray<T>::value_type&); template<class T> valarray<T> pow(constTtypename valarray<T>::value_type&, const valarray<T>&); […]
Edit [valarray.binary] as indicated:
[…] template<class T> valarray<T> operator* (const valarray<T>&, constTtypename valarray<T>::value_type&); template<class T> valarray<T> operator* (constTtypename valarray<T>::value_type&, const valarray<T>&); template<class T> valarray<T> operator/ (const valarray<T>&, constTtypename valarray<T>::value_type&); template<class T> valarray<T> operator/ (constTtypename valarray<T>::value_type&, const valarray<T>&); template<class T> valarray<T> operator% (const valarray<T>&, constTtypename valarray<T>::value_type&); template<class T> valarray<T> operator% (constTtypename valarray<T>::value_type&, const valarray<T>&); template<class T> valarray<T> operator+ (const valarray<T>&, constTtypename valarray<T>::value_type&); template<class T> valarray<T> operator+ (constTtypename valarray<T>::value_type&, const valarray<T>&); template<class T> valarray<T> operator- (const valarray<T>&, constTtypename valarray<T>::value_type&); template<class T> valarray<T> operator- (constTtypename valarray<T>::value_type&, const valarray<T>&); template<class T> valarray<T> operator^ (const valarray<T>&, constTtypename valarray<T>::value_type&); template<class T> valarray<T> operator^ (constTtypename valarray<T>::value_type&, const valarray<T>&); template<class T> valarray<T> operator& (const valarray<T>&, constTtypename valarray<T>::value_type&); template<class T> valarray<T> operator& (constTtypename valarray<T>::value_type&, const valarray<T>&); template<class T> valarray<T> operator| (const valarray<T>&, constTtypename valarray<T>::value_type&); template<class T> valarray<T> operator| (constTtypename valarray<T>::value_type&, const valarray<T>&); template<class T> valarray<T> operator<<(const valarray<T>&, constTtypename valarray<T>::value_type&); template<class T> valarray<T> operator<<(constTtypename valarray<T>::value_type&, const valarray<T>&); template<class T> valarray<T> operator>>(const valarray<T>&, constTtypename valarray<T>::value_type&); template<class T> valarray<T> operator>>(constTtypename valarray<T>::value_type&, const valarray<T>&); […]
Edit [valarray.comparison] as indicated:
[…] template<class T> valarray<bool> operator==(const valarray<T>&, constTtypename valarray<T>::value_type&); template<class T> valarray<bool> operator==(constTtypename valarray<T>::value_type&, const valarray<T>&); template<class T> valarray<bool> operator!=(const valarray<T>&, constTtypename valarray<T>::value_type&); template<class T> valarray<bool> operator!=(constTtypename valarray<T>::value_type&, const valarray<T>&); template<class T> valarray<bool> operator< (const valarray<T>&, constTtypename valarray<T>::value_type&); template<class T> valarray<bool> operator< (constTtypename valarray<T>::value_type&, const valarray<T>&); template<class T> valarray<bool> operator> (const valarray<T>&, constTtypename valarray<T>::value_type&); template<class T> valarray<bool> operator> (constTtypename valarray<T>::value_type&, const valarray<T>&); template<class T> valarray<bool> operator<=(const valarray<T>&, constTtypename valarray<T>::value_type&); template<class T> valarray<bool> operator<=(constTtypename valarray<T>::value_type&, const valarray<T>&); template<class T> valarray<bool> operator>=(const valarray<T>&, constTtypename valarray<T>::value_type&); template<class T> valarray<bool> operator>=(constTtypename valarray<T>::value_type&, const valarray<T>&); template<class T> valarray<bool> operator&&(const valarray<T>&, constTtypename valarray<T>::value_type&); template<class T> valarray<bool> operator&&(constTtypename valarray<T>::value_type&, const valarray<T>&); template<class T> valarray<bool> operator||(const valarray<T>&, constTtypename valarray<T>::value_type&); template<class T> valarray<bool> operator||(constTtypename valarray<T>::value_type&, const valarray<T>&); […]
Edit [valarray.transcend] as indicated:
template<class T> valarray<T> abs (const valarray<T>&); template<class T> valarray<T> acos (const valarray<T>&); template<class T> valarray<T> asin (const valarray<T>&); template<class T> valarray<T> atan (const valarray<T>&); template<class T> valarray<T> atan2(const valarray<T>&, const valarray<T>&); template<class T> valarray<T> atan2(const valarray<T>&, constTtypename valarray<T>::value_type&); template<class T> valarray<T> atan2(constTtypename valarray<T>::value_type&, const valarray<T>&); template<class T> valarray<T> cos (const valarray<T>&); template<class T> valarray<T> cosh (const valarray<T>&); template<class T> valarray<T> exp (const valarray<T>&); template<class T> valarray<T> log (const valarray<T>&); template<class T> valarray<T> log10(const valarray<T>&); template<class T> valarray<T> pow (const valarray<T>&, const valarray<T>&); template<class T> valarray<T> pow (const valarray<T>&, constTtypename valarray<T>::value_type&); template<class T> valarray<T> pow (constTtypename valarray<T>::value_type&, const valarray<T>&); […]
[ 2018-06 Rapperswil: Adopted ]
[ 2018-03-07 Moved to Tentatively Ready after 5 positive votes on c++std-lib. ]
The expression (std::valarray<double>{} * 2) is ill-formed, because argument deduction fails for:
template<class T> valarray<T> operator*(const valarray<T>&, const T&);
Is there any reason to try and deduce the argument from the scalar, instead of only deducing from the valarray and allowing implicit conversions to the scalar? i.e.
template<class T> valarray<T> operator*(const valarray<T>&, const typename valarray<T>::value_type&);
History | |||
---|---|---|---|
Date | User | Action | Args |
2021-02-25 10:48:01 | admin | set | status: wp -> c++20 |
2018-06-12 01:05:16 | admin | set | messages: + msg9885 |
2018-06-12 01:05:16 | admin | set | status: voting -> wp |
2018-05-06 19:23:13 | admin | set | status: ready -> voting |
2018-03-12 12:37:45 | admin | set | messages: + msg9718 |
2018-03-12 12:37:45 | admin | set | status: new -> ready |
2018-03-04 12:29:12 | admin | set | messages: + msg9707 |
2018-02-28 00:00:00 | admin | create |