From: Tom Tromey Date: Fri, 20 Dec 2024 20:45:51 +0000 (-0700) Subject: Simplify traits.h using C++17 X-Git-Tag: binutils-2_44~257 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=99e2df0090faba0705aabd2792fe427de20b8e46;p=thirdparty%2Fbinutils-gdb.git Simplify traits.h using C++17 This patch simplifies gdbsupport/traits.h by reusing some C++17 type traits. I kept the local names, since they are generally better. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31423 Approved-By: Simon Marchi --- diff --git a/gdbsupport/traits.h b/gdbsupport/traits.h index 7350cc45d9c..62e6de7deaa 100644 --- a/gdbsupport/traits.h +++ b/gdbsupport/traits.h @@ -89,54 +89,17 @@ template class Op, typename... Args> using is_detected_convertible = std::is_convertible, To>; -/* A few trait helpers, mainly stolen from libstdc++. Uppercase - because "and/or", etc. are reserved keywords. */ +/* A few trait helpers -- standard traits but with slightly nicer + names. Uppercase because "and/or", etc. are reserved keywords. */ template -struct Not : public std::integral_constant -{}; - -template -struct Or; - -template<> -struct Or<> : public std::false_type -{}; - -template -struct Or : public B1 -{}; - -template -struct Or - : public std::conditional::type -{}; - -template -struct Or - : public std::conditional>::type -{}; - -template -struct And; - -template<> -struct And<> : public std::true_type -{}; - -template -struct And : public B1 -{}; - -template -struct And - : public std::conditional::type -{}; - -template -struct And - : public std::conditional, B1>::type -{}; +using Not = std::negation; + +template +using Or = std::disjunction; + +template +using And = std::conjunction; /* Concepts-light-like helper to make SFINAE logic easier to read. */ template