Многие разработчики и авторы библиотек уже несколько лет борются со строками времени компиляции - поскольку стандартная (библиотечная) строка, std::string
, требует динамического выделения памяти и не является constexpr.
Итак, у нас есть куча вопросов и сообщений в блоге о том, как правильно составить строки во время компиляции:
- Удобное объявление строк времени компиляции в C++
- Конкатенировать строки времени компиляции в шаблоне во время компиляции?
- C++ Управление строками во время компиляции
- (вне сайта) Строки времени компиляции с constexpr
Теперь мы узнали, что new
не только доступен в коде constexpr
, позволяющего динамическое выделение во время компиляции, но, фактически, std::string
станет constexpr в C++ 20 (C++ стандартный отчет совещания рабочей группы Херба Саттера).
Означает ли это, что для кода C++ 20 и выше мы должны бросить все эти изящные реализации строк времени компиляции и просто всегда идти с std::string
?
Если нет - когда мы это сделаем и когда мы будем придерживаться того, что возможно сегодня (кроме, конечно, обратно-совместимого кода)?
Примечание: я не говорю о строках, содержимое которых является частью их типа, то есть не говорю об эквиваленте std::integral_constant
; это определенно не будет std::string
.