<!-- ##### SECTION Title ##### -->
Varargs Value Collection

<!-- ##### SECTION Short_Description ##### -->
Converting varargs to generic values

<!-- ##### SECTION Long_Description ##### -->
<para>

</para>

<!-- ##### SECTION See_Also ##### -->
<para>

</para>

<!-- ##### UNION GTypeCValue ##### -->
<para>
A union holding one collected value.
</para>


<!-- ##### MACRO G_VALUE_COLLECT ##### -->
<para>
Collects a variable argument value from a va_list. We have to
implement the varargs collection as a macro, because on some systems
va_list variables cannot be passed by reference.
</para>

@value: a #GValue return location. @value is supposed to be initialized 
  according to the value type to be collected
@var_args: the va_list variable; it may be evaluated multiple times
@flags: flags which are passed on to the collect_value() function of
  the #GTypeValueTable of @value.
@__error: a #gchar** variable that will be modified to hold a g_new()
  allocated error messages if something fails


<!-- ##### MACRO G_VALUE_LCOPY ##### -->
<para>
Collects a value's variable argument locations from a va_list. 
</para>

@value: a #GValue return location. @value is supposed to be initialized 
  according to the value type to be collected
@var_args: the va_list variable; it may be evaluated multiple times
@flags: flags which are passed on to the lcopy_value() function of
  the #GTypeValueTable of @value.
@__error: a #gchar** variable that will be modified to hold a g_new()
  allocated error messages if something fails


<!-- ##### MACRO G_VALUE_COLLECT_FORMAT_MAX_LENGTH ##### -->
<para>
The maximal number of #GTypeCValue<!-- -->s which can be collected for a 
single #GValue.
</para>



