// Test that passing an object with non-trivial copy constructor and | |
// destructor is (conditionally) supported and has sensible semantics. | |
#include <stdarg.h> | |
extern "C" void abort(); | |
void *as[5]; | |
int i; | |
struct A { | |
A() { as[i++] = this; } | |
A(const A& a) { | |
if (&a != as[i-1]) | |
abort(); | |
as[i++] = this; | |
} | |
~A() { | |
if (this != as[--i]) | |
abort(); | |
} | |
}; | |
void f(int i, ...) { | |
va_list ap; | |
va_start (ap, i); | |
A ar = va_arg (ap, A); | |
} | |
int main() | |
{ | |
f(42,A()); | |
if (i != 0) | |
abort(); | |
} |