Как сложить два &'static str в compile time?


#1
const A: &str = "A";
const B: &str = "B";

// Так не работает
const A_B: &str = A + B;

// И так не работает
const C: &str = concat!(A, B);

fn main() {
}

Playground


#2

Такая issue была в репе раста: https://github.com/rust-lang/rust/issues/31383
По сути можно заюзать уже готовый макрос для этих целей созданный: https://crates.io/crates/const-concat

Единственное, там не смёржен PR, добавляющий ещё 2 feature флага, поэтому надо использователь ветку у форка:
const-concat = { git = “https://github.com/Candunc/const-concat”, branch = “patch-1” }

Пример: https://github.com/LooMaclin/concat_const_example


#3

Я бы написал процедурный макрос. Потому что “велосипеды” это наше всё.


#4

const fn

Сообщение должно быть не короче 20 символов(глупое ограничение форума потребовало добавить этот текст)


#5

Вот лучше бы ссылку на подробности и контекстный пример кинул, вместо ворчания на ограничения. :slight_smile:


#6

Предложенный мной способ не сработал.
я думал внутри consf fn создать static буфер, в буфер положить строки и ссылку на слайс переконвертить в ссылку на str
Но внутри const fn оно почему-то не дает использовать unsafe