mirror of
https://github.com/JakeHillion/object-introspection.git
synced 2024-09-19 11:09:05 +01:00
increase verbosity of size static asserts
This commit is contained in:
parent
04ce7446b2
commit
623f896e9e
@ -277,24 +277,23 @@ void genDefs(const TypeGraph& typeGraph, std::string& code) {
|
||||
}
|
||||
|
||||
void genStaticAssertsClass(const Class& c, std::string& code) {
|
||||
code += "static_assert(sizeof(" + c.name() +
|
||||
") == " + std::to_string(c.size()) +
|
||||
", \"Unexpected size of struct " + c.name() + "\");\n";
|
||||
code += "static_assert(validate_size<" + c.name() + ", " +
|
||||
std::to_string(c.size()) + ">::value);\n";
|
||||
for (const auto& member : c.members) {
|
||||
if (member.bitsize > 0)
|
||||
continue;
|
||||
code += "static_assert(offsetof(" + c.name() + ", " + member.name +
|
||||
") == " + std::to_string(member.bitOffset / 8) +
|
||||
", \"Unexpected offset of " + c.name() + "::" + member.name +
|
||||
"\");\n";
|
||||
|
||||
code += "static_assert(validate_offset<offsetof(" + c.name() + ", " +
|
||||
member.name + "), " + std::to_string(member.bitOffset / 8) +
|
||||
">::value, \"Unexpected offset of " + c.name() +
|
||||
"::" + member.name + "\");\n";
|
||||
}
|
||||
code.push_back('\n');
|
||||
}
|
||||
|
||||
void genStaticAssertsContainer(const Container& c, std::string& code) {
|
||||
code += "static_assert(sizeof(" + c.name() +
|
||||
") == " + std::to_string(c.size()) +
|
||||
", \"Unexpected size of container " + c.name() + "\");\n";
|
||||
code += "static_assert(validate_size<" + c.name() + ", " +
|
||||
std::to_string(c.size()) + ">::value);\n";
|
||||
code.push_back('\n');
|
||||
}
|
||||
|
||||
|
@ -148,3 +148,17 @@ struct alignas(Align) DummyAllocator
|
||||
|
||||
template <typename T>
|
||||
struct DummyAllocator<T, 0> : DummyAllocatorBase<DummyAllocator, T, 0, 0> {};
|
||||
|
||||
template <typename Type, size_t ExpectedSize, size_t ActualSize = 0>
|
||||
struct validate_size : std::true_type {
|
||||
static_assert(ExpectedSize == ActualSize);
|
||||
};
|
||||
|
||||
template <typename Type, size_t ExpectedSize>
|
||||
struct validate_size<Type, ExpectedSize>
|
||||
: validate_size<Type, ExpectedSize, sizeof(Type)> {};
|
||||
|
||||
template <size_t ExpectedOffset, size_t ActualOffset>
|
||||
struct validate_offset : std::true_type {
|
||||
static_assert(ExpectedOffset == ActualOffset);
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user