4

显然,当前 MSVC 2012 RC 中的 std::thread 实现的 std::thread 参数有最大数量。

此代码在 MSVC 和带有 -std=c++0x 的 g++ 中都能正常编译:

std::thread t = std::thread(printf, "%d, %d, %d, %d", 1, 2, 3, 4);
t.join();

但是对于超过 6 个参数,MSVC 会返回错误:

std::thread t = std::thread(printf, "%d, %d, %d, %d, %d", 1, 2, 3, 4, 5);
t.join();

错误 C2661:“std::thread::thread”:没有重载函数需要 7 个参数

这是出于某种目的吗?或者可能是 MSVC 实现中的错误?是因为 MSVC 中还不支持可变参数模板吗?

4

1 回答 1

4

MSVC2010 没有可变参数模板,因此它们是在预处理器的帮助下实现的。

我认为您可以设置 a#define来设置支持的参数数量。我可以稍后在我回到家时检查它是哪一个。

编辑

我刚刚意识到这是大约 2012 版本。正如在VS connect 错误报告中可以看到的那样,它仍然不支持可变参数模板。

于 2012-06-22T09:18:33.693 回答