diff --git a/sgx_tstd/src/thread/local.rs b/sgx_tstd/src/thread/local.rs
index a3440bd..aa009d0 100644
--- a/sgx_tstd/src/thread/local.rs
+++ b/sgx_tstd/src/thread/local.rs
@@ -157,9 +157,9 @@
                 static mut VAL: $t = $init;
                 Ok(&VAL)
             } else {
-                Err(AccessError {
-                    msg: "If TLS data needs to be destructed, TCS policy must be bound.",
-                })
+                Err($crate::thread::AccessError::new(
+                    "If TLS data needs to be destructed, TCS policy must be bound."
+                ))
             }
         }
 
@@ -205,6 +205,12 @@
     msg: &'static str,
 }
 
+impl AccessError {
+    pub fn new(msg: &'static str) -> Self {
+        Self { msg }
+    }
+}
+
 impl fmt::Display for AccessError {
     fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
         fmt::Display::fmt(self.msg, f)
@@ -368,9 +374,9 @@
                 };
                 Ok(value)
             } else {
-                Err(AccessError {
-                    msg: "If TLS data needs to be destructed, TCS policy must be bound.",
-                })
+                Err(AccessError::new(
+                    "If TLS data needs to be destructed, TCS policy must be bound."
+                ))
             }
         }
     }
@@ -470,9 +476,9 @@
         #[inline(never)]
         unsafe fn try_initialize<F: FnOnce() -> T>(&self, init: F) -> Result<&'static T, AccessError> {
             if mem::needs_drop::<T>() && thread::thread_policy() == SgxThreadPolicy::Unbound {
-                return Err(AccessError {
-                    msg: "If TLS data needs to be destructed, TCS policy must be bound.",
-                });
+                return Err(AccessError::new(
+                    "If TLS data needs to be destructed, TCS policy must be bound."
+                ));
             }
 
             if !super::pthread_info_tls.m_pthread.is_null() {
@@ -489,9 +495,7 @@
                 // SAFETY: See comment above (his function doc).
                     Ok(self.inner.initialize(init))
                 } else {
-                    Err(AccessError {
-                        msg: "Failed to register destructor.",
-                    })
+                    Err(AccessError::new("Failed to register destructor."))
                 }
             } else {
                 Ok(self.inner.initialize(init))
@@ -604,9 +608,7 @@
             let ptr = self.os.get() as *mut Value<T>;
             if ptr as usize == 1 {
                 // destructor is running
-                return Err(AccessError {
-                    msg: "Destructor is running.",
-                });
+                return Err(AccessError::new("Destructor is running."));
             }
 
             let ptr = if ptr.is_null() {
