diff --git a/src/c_str.rs b/src/c_str.rs
index 606e883be4c7ce0107c0ecea61007982dd9de40f..b6158b934bd3e33dc857ca72d7ea36cc5b6198f8 100644
--- a/src/c_str.rs
+++ b/src/c_str.rs
@@ -995,7 +995,7 @@ impl CStr {
     /// }
     /// ```
     #[inline]
-    pub unsafe fn from_bytes_with_nul_unchecked(bytes: &[u8]) -> &CStr {
+    pub const unsafe fn from_bytes_with_nul_unchecked(bytes: &[u8]) -> &CStr {
         &*(bytes as *const [u8] as *const CStr)
     }
 
diff --git a/src/lib.rs b/src/lib.rs
index 0038f74a25b0979bb129cbd76c045e709c7ef438..9116f0d5d7ac49847a0efcaa53e45856cd918b12 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -5,6 +5,8 @@
 #![feature(alloc)]
 #![feature(allocator_api)]
 #![feature(const_fn)]
+#![feature(const_raw_ptr_deref)]
+#![feature(const_str_as_bytes)]
 #![feature(const_vec_new)]
 #![feature(core_intrinsics)]
 #![feature(global_asm)]
diff --git a/src/macros.rs b/src/macros.rs
index a564a5ed90559f2a8602ef2b11b2af70a92d1e37..ec0ddf497ba662925fd86359e03575e37d8ef3b2 100644
--- a/src/macros.rs
+++ b/src/macros.rs
@@ -3,8 +3,8 @@ macro_rules! c_str {
     ($lit:expr) => {
         #[allow(unused_unsafe)]
         unsafe {
-            $crate::c_str::CStr::from_ptr(
-                concat!($lit, "\0").as_ptr() as *const $crate::platform::types::c_char
+            $crate::c_str::CStr::from_bytes_with_nul_unchecked(
+                concat!($lit, "\0").as_bytes()
             )
         }
     };