================ @@ -130,6 +155,10 @@ static const llvm::StringSet<> TypeTraits = { "result_of", "invoke_result", "type_identity", + "compare_three_way_result", + "common_comparison_category", ---------------- localspook wrote:
Hm, I've looked into it some more, and it turns out we do already have recursive traits: `common_type` and `common_reference` (also `conjunction` and `disjunction`, but those are "metatraits", they're somewhat different). So maybe recursive traits are alright? I've looked at some implementations, and I thought they were written like this: ```cpp template <...> struct trait { using type = trait<...>::type; // Triggers the check. }; ``` but actually they seem to be written like this: ```cpp template <...> struct trait : trait<...> {}; // No warning. ``` https://github.com/llvm/llvm-project/pull/147074 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits