[libcxx-commits] [libcxx] 16031cb - [libc++] Fix LWG3557 "static_cast expression in convertible_to has the wrong operand"
Arthur O'Dwyer via libcxx-commits
libcxx-commits at lists.llvm.org
Wed Jan 26 16:37:44 PST 2022
Author: Arthur O'Dwyer
Date: 2022-01-26T19:32:46-05:00
New Revision: 16031cbf2bb1662f3b457e537d3e2d84a21adc7c
URL: https://github.com/llvm/llvm-project/commit/16031cbf2bb1662f3b457e537d3e2d84a21adc7c
DIFF: https://github.com/llvm/llvm-project/commit/16031cbf2bb1662f3b457e537d3e2d84a21adc7c.diff
LOG: [libc++] Fix LWG3557 "static_cast expression in convertible_to has the wrong operand"
https://cplusplus.github.io/LWG/issue3557
I think the code change is unobservable, so we could just close this as
"Nothing To Do" instead; but it seems appropriate to follow the Standard's
wording here as closely as possible.
Differential Revision: https://reviews.llvm.org/D117964
Added:
Modified:
libcxx/docs/Status/Cxx2bIssues.csv
libcxx/include/__concepts/convertible_to.h
Removed:
################################################################################
diff --git a/libcxx/docs/Status/Cxx2bIssues.csv b/libcxx/docs/Status/Cxx2bIssues.csv
index 855a1f43a2a99..f949102e94b19 100644
--- a/libcxx/docs/Status/Cxx2bIssues.csv
+++ b/libcxx/docs/Status/Cxx2bIssues.csv
@@ -114,7 +114,7 @@
`3498 <https://wg21.link/LWG3498>`__,"Inconsistent ``noexcept``-specifiers for ``basic_syncbuf``","October 2021","",""
`3535 <https://wg21.link/LWG3535>`__,"``join_view::iterator::iterator_category`` and ``::iterator_concept`` lie","October 2021","","","|ranges|"
`3554 <https://wg21.link/LWG3554>`__,"``chrono::parse`` needs ``const charT*`` and ``basic_string_view<charT>`` overloads","October 2021","","","|chrono|"
-`3557 <https://wg21.link/LWG3557>`__,"The ``static_cast`` expression in ``convertible_to`` has the wrong operand","October 2021","",""
+`3557 <https://wg21.link/LWG3557>`__,"The ``static_cast`` expression in ``convertible_to`` has the wrong operand","October 2021","|Complete|","14.0"
`3559 <https://wg21.link/LWG3559>`__,"Semantic requirements of ``sized_range`` is circular","October 2021","","","|ranges|"
`3560 <https://wg21.link/LWG3560>`__,"``ranges::equal`` and ``ranges::is_permutation`` should short-circuit for ``sized_ranges``","October 2021","","","|ranges|"
`3561 <https://wg21.link/LWG3561>`__,"Issue with internal counter in ``discard_block_engine``","October 2021","",""
diff --git a/libcxx/include/__concepts/convertible_to.h b/libcxx/include/__concepts/convertible_to.h
index ec68967106d5f..795b0bd7494ce 100644
--- a/libcxx/include/__concepts/convertible_to.h
+++ b/libcxx/include/__concepts/convertible_to.h
@@ -10,6 +10,7 @@
#define _LIBCPP___CONCEPTS_CONVERTIBLE_TO_H
#include <__config>
+#include <__utility/declval.h>
#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
@@ -25,8 +26,8 @@ _LIBCPP_BEGIN_NAMESPACE_STD
template<class _From, class _To>
concept convertible_to =
is_convertible_v<_From, _To> &&
- requires (add_rvalue_reference_t<_From> (&__f)()) {
- static_cast<_To>(__f());
+ requires {
+ static_cast<_To>(declval<_From>());
};
#endif // _LIBCPP_STD_VER > 17 && !defined(_LIBCPP_HAS_NO_CONCEPTS)
More information about the libcxx-commits
mailing list