在编译时连接字符串文字

Concatenate string literals at compile time

我需要将可变数量的字符串文字连接成一个,以便在 static_assert()

中使用它

我尝试将模板与结构一起使用,但编译器不喜欢将文字作为模板参数。

error: the address of ‘m1’ is not a valid template argument because it does not have static storage duration.
error: ‘"thre"’ is not a valid template argument for type ‘const char*’ because string literals can never be used in this context

我也试过完美转发,但是报错:‘args#0’ is not a constant expression

template<size_t size>
constexpr size_t const_strssize(const char (&)[size]) {
        return size;
}

template<class... Ts> 
constexpr size_t const_strssize(Ts&&... args) {
        return const_sum<(const_strssize(std::forward<const Ts>(args)), ...)>::get;
}

澄清一下,我无法执行 "string1" "string2",因为我从函数 returns.

中获得了一些字符串

请不要建议像 strlen 或 memcpy 这样的东西。我知道,它们可以在编译时计算。

static_assert() 指定接受字符串文字。您可以编写的任何 constexpr 函数都可以 return 一个常量,但不是文字。所以你只能使用预处理器为 static_assert 构造字符串。对不起。