Skip to content

Commit 97e544f

Browse files
[ADT] Use C++17 fold expression in PointerSumType (NFC) (llvm#159560)
This patch simplifes the recursive Checker template with a C++17 fold expression and "inlines" it right into the `static_assert`.
1 parent df6dce1 commit 97e544f

File tree

1 file changed

+3
-13
lines changed

1 file changed

+3
-13
lines changed

llvm/include/llvm/ADT/PointerSumType.h

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -239,19 +239,9 @@ struct PointerSumTypeHelper : MemberTs... {
239239
TagMask = ~PointerMask
240240
};
241241

242-
// Finally we need a recursive template to do static checks of each
243-
// member.
244-
template <typename MemberT, typename... InnerMemberTs>
245-
struct Checker : Checker<InnerMemberTs...> {
246-
static_assert(MemberT::Tag < (1 << NumTagBits),
247-
"This discriminant value requires too many bits!");
248-
};
249-
template <typename MemberT> struct Checker<MemberT> : std::true_type {
250-
static_assert(MemberT::Tag < (1 << NumTagBits),
251-
"This discriminant value requires too many bits!");
252-
};
253-
static_assert(Checker<MemberTs...>::value,
254-
"Each member must pass the checker.");
242+
// Finally, statically check each member.
243+
static_assert(((MemberTs::Tag < (1 << NumTagBits)) && ...),
244+
"A discriminant value requires too many bits!");
255245
};
256246

257247
} // end namespace detail

0 commit comments

Comments
 (0)