Parse extern C++ structs
diff --git a/syntax/check.rs b/syntax/check.rs
index 7b84b18..5980f75 100644
--- a/syntax/check.rs
+++ b/syntax/check.rs
@@ -71,7 +71,10 @@
 
 fn check_type_box(cx: &mut Check, ptr: &Ty1) {
     if let Type::Ident(ident) = &ptr.inner {
-        if cx.types.cxx.contains(ident) && !cx.types.enums.contains_key(ident) {
+        if cx.types.cxx.contains(ident)
+            && !cx.types.structs.contains_key(ident)
+            && !cx.types.enums.contains_key(ident)
+        {
             cx.error(ptr, error::BOX_CXX_TYPE.msg);
         }
 
@@ -85,7 +88,10 @@
 
 fn check_type_rust_vec(cx: &mut Check, ty: &Ty1) {
     if let Type::Ident(ident) = &ty.inner {
-        if cx.types.cxx.contains(ident) && !cx.types.enums.contains_key(ident) {
+        if cx.types.cxx.contains(ident)
+            && !cx.types.structs.contains_key(ident)
+            && !cx.types.enums.contains_key(ident)
+        {
             cx.error(ty, "Rust Vec containing C++ type is not supported yet");
             return;
         }
@@ -168,6 +174,11 @@
         cx.error(span, "structs without any fields are not supported");
     }
 
+    if cx.types.cxx.contains(&strct.ident) {
+        let span = span_for_struct_error(strct);
+        cx.error(span, "extern C++ structs are not implemented yet");
+    }
+
     for field in &strct.fields {
         if is_unsized(cx, &field.ty) {
             let desc = describe(cx, &field.ty);
@@ -321,7 +332,9 @@
         _ => return false,
     };
     ident == CxxString
-        || cx.types.cxx.contains(ident) && !cx.types.enums.contains_key(ident)
+        || cx.types.cxx.contains(ident)
+            && !cx.types.structs.contains_key(ident)
+            && !cx.types.enums.contains_key(ident)
         || cx.types.rust.contains(ident)
 }