+ * When compiled with gcc, this had the effect of type-checking the
+ * input, so that DEPLANARISE would cast a to_dbcs_t to a
+ * to_dbcs_planar_t but cause a compile error if passed any other
+ * input type, and vice versa. However, MSVC felt that this was a
+ * non-constant expression and hence not legal to use in a static
+ * initialiser, and probably rightly so: I haven't had a chance to
+ * check with the C standard, but I'd be surprised if it _required_
+ * compilers to keep an open mind long enough to discover that the
+ * non-constant part of the expression has its result thrown away.
+ *
+ * I can't think of any other means of performing this type check
+ * which doesn't have the same problem, so I'm taking the type
+ * checks out, with regret.
+ */
+#define DEPLANARISE(x) ( (to_dbcs_t)(x) )
+#define REPLANARISE(x) ( (to_dbcs_planar_t)(x) )
+