G_STATIC_ASSERT: clarify when use is valid
authorRyan Lortie <desrt@desrt.ca>
Fri, 12 Nov 2010 02:47:13 +0000 (21:47 -0500)
committerRyan Lortie <desrt@desrt.ca>
Fri, 12 Nov 2010 02:49:21 +0000 (21:49 -0500)
Clarify when the use of G_STATIC_ASSERT is valid and fix up an invalid
use of it in GDBus.

docs/reference/glib/tmpl/macros_misc.sgml
gio/gdbusmessage.c

index 387a8a5..eb875bb 100644 (file)
@@ -153,6 +153,12 @@ GdkColor *favourite = traveller_get_favourite_colour (traveller);
 The G_STATIC_ASSERT macro lets the programmer check a condition at compile time,
 the condition needs to be compile time computable.
 The macro can be used in any place where a <literal>typedef</literal> is valid.
+</para>
+<note><para>
+A <literal>typedef</literal> is generally allowed in exactly the same
+places that a variable declaration is allowed.  For this reason, you should not use <literal>G_STATIC_ASSERT</literal> in the middle of blocks of code.
+</para></note>
+<para>
 The macro should only be used once per source code line.
 </para>
 
index ade5e7b..92ee23a 100644 (file)
@@ -1183,10 +1183,10 @@ parse_value_from_blob (GMemoryInputStream    *mis,
         {
           guint64 v;
           gdouble *encoded;
+          G_STATIC_ASSERT (sizeof (gdouble) == sizeof (guint64));
           v = g_data_input_stream_read_uint64 (dis, NULL, &local_error);
           if (local_error != NULL)
             goto fail;
-          G_STATIC_ASSERT (sizeof (gdouble) == sizeof (guint64));
           encoded = (gdouble *) &v;
           ret = g_variant_new_double (*encoded);
         }