view lphobos/std/stdarg.d @ 73:b706170e24a9 trunk

[svn r77] Fixed foreach on slice. Fixed some nested function problems when accessing outer function parameters. Major changes to handling of structs. Initial support for unions. Probably more...
author lindquist
date Wed, 31 Oct 2007 03:11:32 +0100
parents fb265a6efea1
children 5825d48b27d1
line wrap: on
line source


/*
 * Placed in public domain.
 * Written by Hauke Duden and Walter Bright
 */

/* This is for use with variable argument lists with extern(D) linkage. */

module std.stdarg;

alias void* va_list;

T va_arg(T)(inout va_list vp)
{
    static assert((T.sizeof & (T.sizeof -1)) == 0);
    va_list vptmp = cast(va_list)((cast(size_t)vp + T.sizeof - 1) &  ~(T.sizeof - 1));
    vp = vptmp + T.sizeof;
    return *cast(T*)vptmp;
}