From 57c783d2c95df136fe1ad2c26d5768ffe6bc8f6e Mon Sep 17 00:00:00 2001 From: Alex Guteniev Date: Sun, 26 Oct 2025 10:20:49 +0200 Subject: [PATCH] `move_only_function`: eliminate the repeated part in call specializations --- stl/inc/functional | 26 ++----------------- .../move_only_function_specializations.py | 4 +-- 2 files changed, 3 insertions(+), 27 deletions(-) diff --git a/stl/inc/functional b/stl/inc/functional index 48feddd89c4..4a7e25a9f15 100644 --- a/stl/inc/functional +++ b/stl/inc/functional @@ -1535,6 +1535,8 @@ _NODISCARD void* _Function_new_large(_CTypes&&... _Args) { template class _Move_only_function_base { public: + using result_type = _Rx; + // TRANSITION, DevCom-1208330: use noexcept(_Noexcept) instead template struct _Invoke_t { @@ -1730,8 +1732,6 @@ class _Move_only_function_call { template class _Move_only_function_call<_Rx(_Types...)> : public _Move_only_function_base<_Rx, false, _Types...> { public: - using result_type = _Rx; - template using _VtInvQuals = _Vt&; @@ -1747,8 +1747,6 @@ public: template class _Move_only_function_call<_Rx(_Types...) &> : public _Move_only_function_base<_Rx, false, _Types...> { public: - using result_type = _Rx; - template using _VtInvQuals = _Vt&; @@ -1763,8 +1761,6 @@ public: template class _Move_only_function_call<_Rx(_Types...) &&> : public _Move_only_function_base<_Rx, false, _Types...> { public: - using result_type = _Rx; - template using _VtInvQuals = _Vt&&; @@ -1779,8 +1775,6 @@ public: template class _Move_only_function_call<_Rx(_Types...) const> : public _Move_only_function_base<_Rx, false, _Types...> { public: - using result_type = _Rx; - template using _VtInvQuals = const _Vt&; @@ -1796,8 +1790,6 @@ public: template class _Move_only_function_call<_Rx(_Types...) const&> : public _Move_only_function_base<_Rx, false, _Types...> { public: - using result_type = _Rx; - template using _VtInvQuals = const _Vt&; @@ -1812,8 +1804,6 @@ public: template class _Move_only_function_call<_Rx(_Types...) const&&> : public _Move_only_function_base<_Rx, false, _Types...> { public: - using result_type = _Rx; - template using _VtInvQuals = const _Vt&&; @@ -1829,8 +1819,6 @@ public: template class _Move_only_function_call<_Rx(_Types...) noexcept> : public _Move_only_function_base<_Rx, true, _Types...> { public: - using result_type = _Rx; - template using _VtInvQuals = _Vt&; @@ -1846,8 +1834,6 @@ public: template class _Move_only_function_call<_Rx(_Types...) & noexcept> : public _Move_only_function_base<_Rx, true, _Types...> { public: - using result_type = _Rx; - template using _VtInvQuals = _Vt&; @@ -1862,8 +1848,6 @@ public: template class _Move_only_function_call<_Rx(_Types...) && noexcept> : public _Move_only_function_base<_Rx, true, _Types...> { public: - using result_type = _Rx; - template using _VtInvQuals = _Vt&&; @@ -1878,8 +1862,6 @@ public: template class _Move_only_function_call<_Rx(_Types...) const noexcept> : public _Move_only_function_base<_Rx, true, _Types...> { public: - using result_type = _Rx; - template using _VtInvQuals = const _Vt&; @@ -1896,8 +1878,6 @@ template class _Move_only_function_call<_Rx(_Types...) const & noexcept> : public _Move_only_function_base<_Rx, true, _Types...> { public: - using result_type = _Rx; - template using _VtInvQuals = const _Vt&; @@ -1913,8 +1893,6 @@ template class _Move_only_function_call<_Rx(_Types...) const && noexcept> : public _Move_only_function_base<_Rx, true, _Types...> { public: - using result_type = _Rx; - template using _VtInvQuals = const _Vt&&; diff --git a/tools/scripts/move_only_function_specializations.py b/tools/scripts/move_only_function_specializations.py index 74ccbaa7475..548bf51486b 100644 --- a/tools/scripts/move_only_function_specializations.py +++ b/tools/scripts/move_only_function_specializations.py @@ -8,8 +8,6 @@ def specialization(cv: str, ref: str, ref_inv: str, noex: str, noex_val: str, ca class _Move_only_function_call<_Rx(_Types...) {cv} {ref} {noex}> : public _Move_only_function_base<_Rx, {noex_val}, _Types...> {{ public: - using result_type = _Rx; - template using _VtInvQuals = {cv} _Vt {ref_inv}; @@ -39,4 +37,4 @@ def cvref_permutations(noex: str, noex_val: str, trait: str) -> str: print(cvref_permutations("", "false", "is_invocable_r_v") + "\n" \ + "#ifdef __cpp_noexcept_function_type" + "\n" \ + cvref_permutations("noexcept", "true", "is_nothrow_invocable_r_v") \ - + "#endif // __cpp_noexcept_function_type") + + "#endif // defined(__cpp_noexcept_function_type)")