[PATCH] D54903: [Sema] Improve static_assert diagnostics.
Arthur O'Dwyer via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Nov 28 05:39:31 PST 2018
Quuxplusone added inline comments.
================
Comment at: lib/Sema/SemaTemplate.cpp:3061
+#define TYPE_TRAIT_N(Spelling, Name, Key) RecordName == (#Spelling + 2) ||
+#include "clang/Basic/TokenKinds.def"
+#undef TYPE_TRAIT_1
----------------
Why do you bother to check a whitelist of "known" type trait names? It seems to me that if you replaced this function body with `return true;`, the diagnostic would automatically be able to handle cases such as
static_assert(std::is_trivially_move_constructible<T>::value); // not a builtin
static_assert(folly::IsRelocatable<T>::value); // not in namespace std
What would go wrong if you replaced this entire function body with `return true;`?
================
Comment at: lib/Sema/SemaTemplate.cpp:3109
+ // This might be `std::some_type_trait<U,V>::value`.
+ if (Var && Var->isStaticDataMember() && Var->getName() == "value" &&
+ prettyPrintTypeTrait(DR->getQualifier(), OS, PrintPolicy)) {
----------------
Again, why do you bother to check this? I would not expect the compiler to treat differently
struct Trait { static constexpr bool value = true; }; static_assert(Trait::value);
struct Trait { static constexpr bool wodget = true; }; static_assert(Trait::wodget);
Repository:
rC Clang
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D54903/new/
https://reviews.llvm.org/D54903
More information about the cfe-commits
mailing list