Allow ValidTraits to be 'inherited'
Real inheritance doesn't work with trait_helpers::AreValidTraits
I.e. this doesn't work:
struct ValidTraits {
ValidTraits(TraitA);
};
struct ValidTraits2 : public ValidTraits {
ValidTraits2(TraitB);
};
But we can make this work:
struct ValidTraits {
ValidTraits(TraitA);
};
struct ValidTraits2 {
ValidTraits2(ValidTraits);
ValidTraits2(TraitB);
};
Unfortunately that doesn't work 3 levels deep, but it does fix
the requirements for the BrowserUIThreadScheduler.
Bug: 863341
Change-Id: I059c6db46be3363efcc57f1bee721e697231c888
Reviewed-on: https://chromium-review.googlesource.com/c/1400582
Commit-Queue: Alex Clarke <[email protected]>
Reviewed-by: François Doray <[email protected]>
Cr-Commit-Position: refs/heads/master@{#620720}
diff --git a/base/traits_bag_unittest.cc b/base/traits_bag_unittest.cc
index 05fad0ae..63f5846 100644
--- a/base/traits_bag_unittest.cc
+++ b/base/traits_bag_unittest.cc
@@ -126,5 +126,19 @@
EXPECT_EQ(c.enum_trait_a, EnumTraitA::C);
}
+TEST(TraitsBagTest, ValidTraitInheritance) {
+ struct ValidTraitsA {
+ ValidTraitsA(EnumTraitA);
+ };
+
+ struct ValidTraitsB {
+ ValidTraitsB(ValidTraitsA);
+ ValidTraitsB(EnumTraitB);
+ };
+
+ static_assert(AreValidTraits<ValidTraitsA, EnumTraitA>(), "");
+ static_assert(AreValidTraits<ValidTraitsB, EnumTraitA, EnumTraitB>(), "");
+}
+
} // namespace trait_helpers
} // namespace base