[!VERIFY] (VERIFY): Define.
authorJim Meyering <jim@meyering.net>
Thu, 30 Jun 2005 16:39:41 +0000 (16:39 +0000)
committerJim Meyering <jim@meyering.net>
Thu, 30 Jun 2005 16:39:41 +0000 (16:39 +0000)
(ARGMATCH_VERIFY): Use it, so this macro may be used more than
once in any given scope.

lib/argmatch.h

index ea0f46800e689a0b6fc6089ed4905a48b904fc76..45bfa03a7d5af5819d5699b556ab96ee6537fd13 100644 (file)
@@ -1,6 +1,6 @@
 /* argmatch.h -- definitions and prototypes for argmatch.c
 
-   Copyright (C) 1990, 1998, 1999, 2001, 2002, 2004 Free Software
+   Copyright (C) 1990, 1998, 1999, 2001, 2002, 2004, 2005 Free Software
    Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
 
 # include <stddef.h>
 
+# ifndef VERIFY
+#  define GL_CONCAT0(x, y) x##y
+#  define GL_CONCAT(x, y) GL_CONCAT0 (x, y)
+/* Verify a requirement at compile-time (unlike assert, which is runtime).  */
+#  define VERIFY(assertion) \
+    struct GL_CONCAT (compile_time_assert_, __LINE__) \
+      { char a[(assertion) ? 1 : -1]; }
+# endif
+
 # define ARRAY_CARDINALITY(Array) (sizeof (Array) / sizeof *(Array))
 
 # define ARGMATCH_CONSTRAINT(Arglist, Vallist) \
    preferred, since it is guaranteed to be checked at compile-time.
    ARGMATCH_ASSERT is for backward compatibility only.  */
 
-# define ARGMATCH_VERIFY(Arglist, Vallist)                               \
-  struct argmatch_verify                                                 \
-  {                                                                      \
-    char argmatch_verify[ARGMATCH_CONSTRAINT(Arglist, Vallist) ? 1 : -1]; \
-  }
+# define ARGMATCH_VERIFY(Arglist, Vallist) \
+    VERIFY (ARGMATCH_CONSTRAINT (Arglist, Vallist))
 
 # define ARGMATCH_ASSERT(Arglist, Vallist) \
   assert (ARGMATCH_CONSTRAINT (Arglist, Vallist))