constexpr c字符串连接,constexpr上下文中使用的参数

时间:2016-08-29 06:11:49

标签: c++ c++11 compile-time-constant

我正在探索我能从这个答案中获取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();
  }
}

LIVE example

1 个答案:

答案 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);
}

Demo