================
@@ -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

Reply via email to