在C++ 14中,不可能使用多个参数包来调用函数模板:

#include <future>

template<class... Futures, class... Incrementables>
void foo(Futures&... futures, Incrementables... incrementables)
{
}

int main()
{
  std::future<int> a, b;
  int x, y;

  // ERROR
  foo(a, b, x, y);

  return 0;
}

由于尚不清楚第一个参数包在哪里结束而第二个参数包在哪里开始,因此如果没有程序员提供的其他信息,就无法调用foo

但是,似乎给定了FutureIncrementable正确的概念,这两个参数包在原则上可以消除歧义。

即将发布的C++概念技术规范的任何功能是否会放宽这些限制,并允许调用带有多个参数包的函数模板?

最佳答案

Concepts Lite的约束系统位于现有模板机制之上。特别是,它不会干扰模板自变量的推导。 Futures包在您的示例中不可推论,即使是概念也是如此。



您可能没有在这里选择最好的示例,尽管这并没有真正使您提出问题的前提变得不那么有趣。你怎么看的

Future{Fut}
struct incrementable_future: Fut {
    using Fut::Fut;

    incrementable_future& operator++() { return *this; }
};

关于c++ - C++ Concepts TS会启用多个参数包吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39668095/

10-11 00:20