находил только инфу что в С++20 сделали работающий аллокатор, чтобы можно было взять кусок памяти (но обязательно его освободить к концу, чтобы оставалось 0 занятых байт)
Но не могу найти, как это все происходит: на каком этапе компиляции, где эти аллокации трекаются, почему нельзя было бы аллоцированную память смаппить в .rodata (т.е. constexpr-векторы и строки можно использовать в constexptr-вычислениях, но нельзя использовать в рантайме, т.е. они не constinit), и т.д. и т.п.
Последнее называется non-transient allocations. Можно нагуглить, например, это - https://lists.isocpp.org/std-discussion/2019/06/0051.php > if you have constexpr std::vector<std::unique_ptr<int>> V = ...; then the language doesn't have a mechanism to stop you from modifying the values that the elements of V point to
Спасибо. Примеры там конечно странные, я ожидал бы что этот код был бы невозможен в рамках constexpr-вычислений, по причине не-constexpr-овости unique_ptr
Обсуждают сегодня