allow length in CZString
diff --git a/include/json/value.h b/include/json/value.h
index f8fe824..439f05d 100644
--- a/include/json/value.h
+++ b/include/json/value.h
@@ -176,8 +176,16 @@
 
   private:
     void swap(CZString& other);
+    struct StringStorage {
+      DuplicationPolicy policy_: 2;
+      unsigned length_: 30; // 1GB max
+    };
+
     const char* cstr_;
-    ArrayIndex index_;
+    union {
+      ArrayIndex index_;
+      StringStorage storage_;
+    };
   };
 
 public: