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

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

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

</para>

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

</para>

<!-- ##### SECTION Stability_Level ##### -->


<!-- ##### 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>



