Clarify that VectorElement is not meant to be implemented
diff --git a/macro/src/expand.rs b/macro/src/expand.rs
index 477495a..657bcd2 100644
--- a/macro/src/expand.rs
+++ b/macro/src/expand.rs
@@ -655,7 +655,7 @@
     let link_push_back = format!("{}push_back", prefix);
 
     quote! {
-        impl ::cxx::private::VectorElement<#inner> for #inner {
+        unsafe impl ::cxx::private::VectorElement<#inner> for #inner {
             fn __get_unchecked(v: &::cxx::CxxVector<#inner>, pos: usize) -> &#inner {
                 extern "C" {
                     #[link_name = #link_get_unchecked]
@@ -698,7 +698,7 @@
     let link_push_back = format!("{}push_back", prefix);
 
     quote! {
-        impl VectorElement<#inner> for #inner {
+        unsafe impl VectorElement<#inner> for #inner {
             fn __get_unchecked(v: &CxxVector<#inner>, pos: usize) -> &#inner {
                 extern "C" {
                     #[link_name = #link_get_unchecked]
diff --git a/src/cxx_vector.rs b/src/cxx_vector.rs
index 7db8a45..c3f4fe7 100644
--- a/src/cxx_vector.rs
+++ b/src/cxx_vector.rs
@@ -64,8 +64,10 @@
     }
 }
 
+// Methods are private; not intended to be implemented outside of cxxbridge
+// codebase.
 #[doc(hidden)]
-pub trait VectorElement<T> {
+pub unsafe trait VectorElement<T> {
     fn __get_unchecked(v: &CxxVector<T>, pos: usize) -> &T
     where
         Self: Sized;