Resolve MSVC "C-linkage specified, but returns UDT" warning

    cxxbridge\sources\tests\ffi\lib.rs.cc(1335): warning C4190: 'tests$cxxbridge1$c_return_str' has C-linkage specified, but returns UDT 'rust::cxxbridge1::Str' which is incompatible with C
    cxxbridge\include\rust/cxx.h(93): note: see declaration of 'rust::cxxbridge1::Str'
    cxxbridge\sources\tests\ffi\lib.rs.cc(1340): warning C4190: 'tests$cxxbridge1$c_return_slice_char' has C-linkage specified, but returns UDT 'rust::cxxbridge1::Slice<const char>' which is incompatible with C
    cxxbridge\crate\tests/ffi/tests.h(93): note: see declaration of 'rust::cxxbridge1::Slice<const char>'
    cxxbridge\sources\tests\ffi\lib.rs.cc(1345): warning C4190: 'tests$cxxbridge1$c_return_mutsliceu8' has C-linkage specified, but returns UDT 'rust::cxxbridge1::Slice<uint8_t>' which is incompatible with C
    cxxbridge\crate\tests/ffi/tests.h(94): note: see declaration of 'rust::cxxbridge1::Slice<uint8_t>'
    cxxbridge\sources\tests\ffi\lib.rs.cc(1976): warning C4190: 'tests$cxxbridge1$r_return_str' has C-linkage specified, but returns UDT 'rust::cxxbridge1::Str' which is incompatible with C
    cxxbridge\include\rust/cxx.h(93): note: see declaration of 'rust::cxxbridge1::Str'
    cxxbridge\sources\tests\ffi\lib.rs.cc(1978): warning C4190: 'tests$cxxbridge1$r_return_sliceu8' has C-linkage specified, but returns UDT 'rust::cxxbridge1::Slice<const uint8_t>' which is incompatible with C
    cxxbridge\crate\tests/ffi/tests.h(163): note: see declaration of 'rust::cxxbridge1::Slice<const uint8_t>'
    cxxbridge\sources\tests\ffi\lib.rs.cc(1980): warning C4190: 'tests$cxxbridge1$r_return_mutsliceu8' has C-linkage specified, but returns UDT 'rust::cxxbridge1::Slice<uint8_t>' which is incompatible with C
    cxxbridge\crate\tests/ffi/tests.h(94): note: see declaration of 'rust::cxxbridge1::Slice<uint8_t>'
diff --git a/gen/src/builtin.rs b/gen/src/builtin.rs
index 7b15b61..65cd703 100644
--- a/gen/src/builtin.rs
+++ b/gen/src/builtin.rs
@@ -20,6 +20,7 @@
     pub maybe_uninit: bool,
     pub trycatch: bool,
     pub ptr_len: bool,
+    pub repr_fat: bool,
     pub exception: bool,
     pub relocatable: bool,
     pub friend_impl: bool,
@@ -230,6 +231,17 @@
         out.end_block(Block::Namespace("repr"));
     }
 
+    if builtin.repr_fat {
+        include.array = true;
+        include.cstdint = true;
+        out.begin_block(Block::Namespace("repr"));
+        writeln!(out, "template <typename T>");
+        writeln!(out, "struct Fat final {{");
+        writeln!(out, "  T repr;");
+        writeln!(out, "}};");
+        out.end_block(Block::Namespace("repr"));
+    }
+
     if builtin.rust_error {
         out.next_section();
         writeln!(out, "template <>");