[PATCH 00/10] c++, libstdc++: get std::is_object to dispatch to new built-in traits
Ken Matsui
kmatsui@cs.washington.edu
Sun Mar 26 04:30:22 GMT 2023
Hi,
This patch series gets std::is_object to dispatch to built-in traits and
implements the following built-in traits, on which std::object depends.
* __is_reference
* __is_function
* __is_void
std::is_object was depending on them with disjunction and negation.
__not_<__or_<is_function<_Tp>, is_reference<_Tp>, is_void<_Tp>>>::type
Therefore, this patch uses them directly instead of implementing an additional
built-in trait __is_object, which makes the compiler slightly bigger and
slower.
__bool_constant<!(__is_function(_Tp) || __is_reference(_Tp) || __is_void(_Tp))>
This would instantiate only __bool_constant<true> and __bool_constant<false>,
which can be mostly shared. That is, the purpose of built-in traits is
considered as achieved.
Ken Matsui (10):
c++: implement __is_reference built-in trait
libstdc++: use new built-in trait __is_reference for std::is_reference
c++: implement __is_function built-in trait
libstdc++: use new built-in trait __is_function for std::is_function
libstdc++: use std::is_void instead of __is_void in helper_functions.h
libstdc++: remove unused __is_void in cpp_type_traits.h
c++: rename __is_void defined in pr46567.C to ____is_void
c++: implement __is_void built-in trait
libstdc++: use new built-in trait __is_void for std::is_void
libstdc++: make std::is_object dispatch to new built-in traits
gcc/cp/constraint.cc | 9 +++
gcc/cp/cp-trait.def | 3 +
gcc/cp/semantics.cc | 12 ++++
gcc/testsuite/g++.dg/ext/has-builtin-1.C | 9 +++
gcc/testsuite/g++.dg/ext/is_function.C | 58 +++++++++++++++++++
gcc/testsuite/g++.dg/ext/is_reference.C | 34 +++++++++++
gcc/testsuite/g++.dg/ext/is_void.C | 35 +++++++++++
gcc/testsuite/g++.dg/tm/pr46567.C | 6 +-
libstdc++-v3/include/bits/cpp_type_traits.h | 15 -----
libstdc++-v3/include/debug/helper_functions.h | 2 +-
libstdc++-v3/include/std/type_traits | 30 ++++++++++
11 files changed, 194 insertions(+), 19 deletions(-)
create mode 100644 gcc/testsuite/g++.dg/ext/is_function.C
create mode 100644 gcc/testsuite/g++.dg/ext/is_reference.C
create mode 100644 gcc/testsuite/g++.dg/ext/is_void.C
--
2.40.0
More information about the Gcc-patches
mailing list