32 lines
607 B
C
32 lines
607 B
C
#include <stdio.h>
|
|
|
|
enum HANDLE_STATE {
|
|
HANDLE_CREAT,
|
|
HANDLE_DESTR
|
|
};
|
|
|
|
struct Meaning {
|
|
int a;
|
|
int b;
|
|
};
|
|
|
|
static inline void Meaning_lifetime_handler(enum HANDLE_STATE state, struct Meaning *this, void *data) {
|
|
if(state == HANDLE_CREAT) {
|
|
this->a = *(int*) data;
|
|
this->b = 2;
|
|
} else {
|
|
printf("%d\n", this->a + this->b);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
int main() {
|
|
int initializer = 40;
|
|
[[gnu::always_inline]] inline void F(struct Meaning *v) { Meaning_lifetime_handler(HANDLE_DESTR, v,
|
|
((void *)0)
|
|
); } [[gnu::cleanup(F)]] struct Meaning d; Meaning_lifetime_handler(HANDLE_CREAT, & d, &initializer);;
|
|
|
|
return 0;
|
|
}
|