From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2181) id 85FA5388E801; Wed, 18 Aug 2021 14:36:19 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 85FA5388E801 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Jonathan Wakely To: gcc-cvs@gcc.gnu.org, libstdc++-cvs@gcc.gnu.org Subject: [gcc r12-2996] libstdc++: Simplify n-ary arithmetic promotion traits X-Act-Checkin: gcc X-Git-Author: Jonathan Wakely X-Git-Refname: refs/heads/master X-Git-Oldrev: de44eee5d52f5980b6b2b2120940f70cc2fa007e X-Git-Newrev: 37620d575111caf3b24d4b9039808334e619c13a Message-Id: <20210818143619.85FA5388E801@sourceware.org> Date: Wed, 18 Aug 2021 14:36:19 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 18 Aug 2021 14:36:19 -0000 https://gcc.gnu.org/g:37620d575111caf3b24d4b9039808334e619c13a commit r12-2996-g37620d575111caf3b24d4b9039808334e619c13a Author: Jonathan Wakely Date: Tue Aug 17 20:26:52 2021 +0100 libstdc++: Simplify n-ary arithmetic promotion traits The std::complex partial specializations have been unnecessary since 774c3d8647cc7012937cfc9d2d6dacc85b6cf8e9 Signed-off-by: Jonathan Wakely libstdc++-v3/ChangeLog: * include/ext/type_traits.h (__promote_2, __promote_3) (__promote_4): Redfine as alias templates using __promoted_t. * include/std/complex (__promote_2): Remove partial specializations for std::complex. Diff: --- libstdc++-v3/include/ext/type_traits.h | 16 +++++++++++++++- libstdc++-v3/include/std/complex | 29 ----------------------------- 2 files changed, 15 insertions(+), 30 deletions(-) diff --git a/libstdc++-v3/include/ext/type_traits.h b/libstdc++-v3/include/ext/type_traits.h index 065edb4e9a5..fed78d3a527 100644 --- a/libstdc++-v3/include/ext/type_traits.h +++ b/libstdc++-v3/include/ext/type_traits.h @@ -189,9 +189,22 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { typedef float __type; }; #if __cpp_fold_expressions + template using __promoted_t = decltype((typename __promote<_Tp>::__type(0) + ...)); -#endif + + // Deducing the promoted type is done by __promoted_t<_Tp...>, + // then __promote is used to provide the nested __type member. + template + using __promote_2 = __promote<__promoted_t<_Tp, _Up>>; + + template + using __promote_3 = __promote<__promoted_t<_Tp, _Up, _Vp>>; + + template + using __promote_4 = __promote<__promoted_t<_Tp, _Up, _Vp, _Wp>>; + +#else template::__type, @@ -219,6 +232,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { typedef __typeof__(_Tp2() + _Up2() + _Vp2() + _Wp2()) __type; }; +#endif _GLIBCXX_END_NAMESPACE_VERSION } // namespace diff --git a/libstdc++-v3/include/std/complex b/libstdc++-v3/include/std/complex index c2f6421e0b7..a5b4406dd68 100644 --- a/libstdc++-v3/include/std/complex +++ b/libstdc++-v3/include/std/complex @@ -1557,35 +1557,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _GLIBCXX_END_NAMESPACE_VERSION } // namespace -namespace __gnu_cxx _GLIBCXX_VISIBILITY(default) -{ -_GLIBCXX_BEGIN_NAMESPACE_VERSION - - // See ext/type_traits.h for the primary template. - template - struct __promote_2, _Up> - { - public: - typedef std::complex::__type> __type; - }; - - template - struct __promote_2<_Tp, std::complex<_Up> > - { - public: - typedef std::complex::__type> __type; - }; - - template - struct __promote_2, std::complex<_Up> > - { - public: - typedef std::complex::__type> __type; - }; - -_GLIBCXX_END_NAMESPACE_VERSION -} // namespace - #if __cplusplus >= 201103L namespace std _GLIBCXX_VISIBILITY(default)