This came up when I was asking around about what the proper way was to:
- Allocate aligned storage for a buffer pool/page cache
- Then create pointers to "Page" structs inside of the storage memory area
I thought something like this might do:
struct buffer_pool
{
alignas(PAGE_SIZE) std::byte storage[NUM_PAGES * PAGE_SIZE];
page* pages = new (storage) page[NUM_PAGES];
}
Someone told me that this was a valid solution but not to do it, because it
wouldn't function properly on GCC
They gave this as a reproduction:
https://godbolt.org/z/EhzM37Gzh
I'm not experienced enough with C++ to grok the connection between this
repro and my code, but I figured
I'd post it on the mailing list in case it was useful for others/might get
fixed in the future =)
They said it had to do with "handling of lifetimes of implicit-lifetime
types"