Я изучал, как далеко я могу взять конкатенацию constexpr char const * из этого ответа: constexpr для объединения двух или более строк символов
У меня есть следующий код пользователя, который точно показывает, что я пытаюсь сделать. Кажется, что компилятор не видит, что параметры функции (a и b) передаются как constexpr.
Может ли кто-нибудь увидеть способ заставить те два, которые я указываю ниже, не работать, а действительно работать? Было бы чрезвычайно удобно иметь возможность комбинировать массивы символов с помощью подобных функций.
template<typename A, typename B>
constexpr auto
test1(A a, B b)
{
return concat(a, b);
}
constexpr auto
test2(char const* a, char const* b)
{
return concat(a, b);
}
int main()
{
{
// works
auto constexpr text = concat("hi", " ", "there!");
std::cout << text.data();
}
{
// doesn't work
auto constexpr text = test1("uh", " oh");
std::cout << text.data();
}
{
// doesn't work
auto constexpr text = test2("uh", " oh");
std::cout << text.data();
}
}