我正在探索我能从这个答案中获取constexpr char const * concatenation的距离: constexpr to concatenate two or more char strings
我有以下用户代码,可以准确显示我尝试做的事情。似乎编译器无法看到函数参数(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();
}
}
答案 0 :(得分:4)
concat
需要const char (&)[N]
,在您的两种情况下,类型都是const char*
,因此您可能会将您的功能更改为:
template<typename A, typename B>
constexpr auto
test1(const A& a, const B& b)
{
return concat(a, b);
}