[llvm] 648831b - [ADT] Move llvm::is_detected to STLForwardCompat.h (#158004)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Sep 11 07:54:16 PDT 2025
- Previous message: [llvm] [NFC][PowerPC] Pre-commit testcases for locking down the xxsel instructions for ternary(A, X, eqv(B, C)), ternary(A, X, not(C)), ternary(A, X, not(B)), ternary(A, X, nand(B, C)) and ternary(A, X, nor(B, C)) patterns (PR #158091)
- Next message: [llvm] 808f5d1 - [ADT] Simplify a constructor of iterator_range (NFC) (#158005)
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Author: Kazu Hirata
Date: 2025-09-11T07:54:12-07:00
New Revision: 648831b210bd51f50858761b552ddca3071cf4e1
URL: https://github.com/llvm/llvm-project/commit/648831b210bd51f50858761b552ddca3071cf4e1
DIFF: https://github.com/llvm/llvm-project/commit/648831b210bd51f50858761b552ddca3071cf4e1.diff
LOG: [ADT] Move llvm::is_detected to STLForwardCompat.h (#158004)
llvm::is_detected forward-ported from C++20. As such, it belongs to
STLForwardCompat.h.
Added:
Modified:
llvm/include/llvm/ADT/STLExtras.h
llvm/include/llvm/ADT/STLForwardCompat.h
Removed:
################################################################################
diff --git a/llvm/include/llvm/ADT/STLExtras.h b/llvm/include/llvm/ADT/STLExtras.h
index 5923fdd46a378..099bef288b953 100644
--- a/llvm/include/llvm/ADT/STLExtras.h
+++ b/llvm/include/llvm/ADT/STLExtras.h
@@ -58,26 +58,6 @@ template <typename T> struct make_const_ref {
using type = std::add_lvalue_reference_t<std::add_const_t<T>>;
};
-namespace detail {
-template <class, template <class...> class Op, class... Args> struct detector {
- using value_t = std::false_type;
-};
-template <template <class...> class Op, class... Args>
-struct detector<std::void_t<Op<Args...>>, Op, Args...> {
- using value_t = std::true_type;
-};
-} // end namespace detail
-
-/// Detects if a given trait holds for some set of arguments 'Args'.
-/// For example, the given trait could be used to detect if a given type
-/// has a copy assignment operator:
-/// template<class T>
-/// using has_copy_assign_t = decltype(std::declval<T&>()
-/// = std::declval<const T&>());
-/// bool fooHasCopyAssign = is_detected<has_copy_assign_t, FooClass>::value;
-template <template <class...> class Op, class... Args>
-using is_detected = typename detail::detector<void, Op, Args...>::value_t;
-
/// This class provides various trait information about a callable object.
/// * To access the number of arguments: Traits::num_args
/// * To access the type of an argument: Traits::arg_t<Index>
diff --git a/llvm/include/llvm/ADT/STLForwardCompat.h b/llvm/include/llvm/ADT/STLForwardCompat.h
index 0ef8cb5d02e50..da9d3ab0e32a3 100644
--- a/llvm/include/llvm/ADT/STLForwardCompat.h
+++ b/llvm/include/llvm/ADT/STLForwardCompat.h
@@ -49,6 +49,26 @@ template <typename T>
using type_identity_t // NOLINT(readability-identifier-naming)
= typename llvm::type_identity<T>::type;
+namespace detail {
+template <class, template <class...> class Op, class... Args> struct detector {
+ using value_t = std::false_type;
+};
+template <template <class...> class Op, class... Args>
+struct detector<std::void_t<Op<Args...>>, Op, Args...> {
+ using value_t = std::true_type;
+};
+} // end namespace detail
+
+/// Detects if a given trait holds for some set of arguments 'Args'.
+/// For example, the given trait could be used to detect if a given type
+/// has a copy assignment operator:
+/// template<class T>
+/// using has_copy_assign_t = decltype(std::declval<T&>()
+/// = std::declval<const T&>());
+/// bool fooHasCopyAssign = is_detected<has_copy_assign_t, FooClass>::value;
+template <template <class...> class Op, class... Args>
+using is_detected = typename detail::detector<void, Op, Args...>::value_t;
+
//===----------------------------------------------------------------------===//
// Features from C++23
//===----------------------------------------------------------------------===//
- Previous message: [llvm] [NFC][PowerPC] Pre-commit testcases for locking down the xxsel instructions for ternary(A, X, eqv(B, C)), ternary(A, X, not(C)), ternary(A, X, not(B)), ternary(A, X, nand(B, C)) and ternary(A, X, nor(B, C)) patterns (PR #158091)
- Next message: [llvm] 808f5d1 - [ADT] Simplify a constructor of iterator_range (NFC) (#158005)
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the llvm-commits
mailing list