diff --git a/src/describe.rs b/src/describe.rs
index b6b325ed..a59257f9 100644
--- a/src/describe.rs
+++ b/src/describe.rs
@@ -3,6 +3,7 @@
 
 #![doc(hidden)]
 
+use cfg_if::cfg_if;
 use crate::{Clamped, JsValue};
 
 macro_rules! tys {
@@ -54,7 +55,7 @@ pub trait WasmDescribe {
 }
 
 macro_rules! simple {
-    ($($t:ident => $d:expr)*) => ($(
+    ($($t:ident => $d:ident)*) => ($(
         impl WasmDescribe for $t {
             fn describe() { inform($d) }
         }
@@ -76,10 +77,22 @@ simple! {
     f64 => F64
     bool => BOOLEAN
     char => CHAR
-    str => if cfg!(feature = "enable-interning") { CACHED_STRING } else { STRING }
     JsValue => ANYREF
 }
 
+cfg_if! {
+    if #[cfg(feature = "enable-interning")] {
+        simple! {
+            str => CACHED_STRING
+        }
+
+    } else {
+        simple! {
+            str => STRING
+        }
+    }
+}
+
 impl<T> WasmDescribe for *const T {
     fn describe() {
         inform(I32)
@@ -116,8 +129,17 @@ impl<'a, T: WasmDescribe + ?Sized> WasmDescribe for &'a mut T {
 if_std! {
     use std::prelude::v1::*;
 
-    impl WasmDescribe for String {
-        fn describe() { inform(if cfg!(feature = "enable-interning") { CACHED_STRING } else { STRING }) }
+    cfg_if! {
+        if #[cfg(feature = "enable-interning")] {
+            simple! {
+                String => CACHED_STRING
+            }
+
+        } else {
+            simple! {
+                String => STRING
+            }
+        }
     }
 
     impl<T: WasmDescribe> WasmDescribe for Box<[T]> {