Move is_complete type trait to header
diff --git a/gen/src/builtin.rs b/gen/src/builtin.rs
index 1de36e1..dbd019b 100644
--- a/gen/src/builtin.rs
+++ b/gen/src/builtin.rs
@@ -102,6 +102,11 @@
include.type_traits = true;
}
+ if builtin.is_complete {
+ include.cstddef = true;
+ include.type_traits = true;
+ }
+
out.begin_block(Block::Namespace("rust"));
out.begin_block(Block::InlineNamespace("cxxbridge1"));
writeln!(out, "// #include \"rust/cxx.h\"");
@@ -136,6 +141,7 @@
ifndef::write(out, builtin.rust_isize, "CXXBRIDGE1_RUST_ISIZE");
ifndef::write(out, builtin.opaque, "CXXBRIDGE1_RUST_OPAQUE");
ifndef::write(out, builtin.relocatable, "CXXBRIDGE1_RELOCATABLE");
+ ifndef::write(out, builtin.is_complete, "CXXBRIDGE1_IS_COMPLETE");
out.begin_block(Block::Namespace("detail"));
@@ -277,20 +283,6 @@
writeln!(out, "}};");
}
- if builtin.is_complete {
- include.cstddef = true;
- include.type_traits = true;
- out.next_section();
- writeln!(out, "template <typename T, typename = ::std::size_t>");
- writeln!(out, "struct is_complete : std::false_type {{}};");
- out.next_section();
- writeln!(out, "template <typename T>");
- writeln!(
- out,
- "struct is_complete<T, decltype(sizeof(T))> : std::true_type {{}};",
- );
- }
-
if builtin.deleter_if {
out.next_section();
writeln!(out, "template <bool> struct deleter_if {{");
diff --git a/gen/src/write.rs b/gen/src/write.rs
index 0083525..e20f54f 100644
--- a/gen/src/write.rs
+++ b/gen/src/write.rs
@@ -1622,7 +1622,7 @@
};
writeln!(
out,
- "static_assert(::rust::is_complete<{}>::value, \"definition of {} is required\");",
+ "static_assert(::rust::detail::is_complete<{}>::value, \"definition of {} is required\");",
inner, definition,
);
}
@@ -1689,7 +1689,7 @@
out.builtin.deleter_if = true;
writeln!(
out,
- " ::rust::deleter_if<::rust::is_complete<{}>::value>{{}}(ptr);",
+ " ::rust::deleter_if<::rust::detail::is_complete<{}>::value>{{}}(ptr);",
inner,
);
} else {