[PATCH v14 05/40] libstdc++: Optimize is_volatile trait performance
Ken Matsui
kmatsui@gcc.gnu.org
Fri Sep 15 23:50:51 GMT 2023
This patch optimizes the performance of the is_volatile trait by dispatching
to the new __is_volatile built-in trait.
libstdc++-v3/ChangeLog:
* include/std/type_traits (is_volatile): Use __is_volatile built-in
trait.
(is_volatile_v): Likewise.
Signed-off-by: Ken Matsui <kmatsui@gcc.gnu.org>
---
libstdc++-v3/include/std/type_traits | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/libstdc++-v3/include/std/type_traits b/libstdc++-v3/include/std/type_traits
index 686e38e47c3..c01f65df22b 100644
--- a/libstdc++-v3/include/std/type_traits
+++ b/libstdc++-v3/include/std/type_traits
@@ -800,6 +800,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
#endif
/// is_volatile
+#if _GLIBCXX_USE_BUILTIN_TRAIT(__is_volatile)
+ template<typename _Tp>
+ struct is_volatile
+ : public __bool_constant<__is_volatile(_Tp)>
+ { };
+#else
template<typename>
struct is_volatile
: public false_type { };
@@ -807,6 +813,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _Tp>
struct is_volatile<_Tp volatile>
: public true_type { };
+#endif
/// is_trivial
template<typename _Tp>
@@ -3236,10 +3243,15 @@ template <typename _Tp>
inline constexpr bool is_const_v<const _Tp> = true;
#endif
+#if _GLIBCXX_USE_BUILTIN_TRAIT(__is_volatile)
+template <typename _Tp>
+ inline constexpr bool is_volatile_v = __is_volatile(_Tp);
+#else
template <typename _Tp>
inline constexpr bool is_volatile_v = false;
template <typename _Tp>
inline constexpr bool is_volatile_v<volatile _Tp> = true;
+#endif
template <typename _Tp>
inline constexpr bool is_trivial_v = __is_trivial(_Tp);
--
2.42.0
More information about the Libstdc++
mailing list