C++ VS 11和std::future-这是一个bug吗?

C++ VS 11和std::future-这是一个bug吗?,c++,visual-c++,c++11,overload-resolution,visual-c++-2012,C++,Visual C++,C++11,Overload Resolution,Visual C++ 2012,我最近安装了VisualStudio11开发者预览版。在玩线程和期货时,我遇到了以下设置: #include <future> #include <iostream> int foo(unsigned a, unsigned b) { return 5; } int main() { std::future<int> f = std::async(foo, 5, 7); std::cout << f.get(); }

我最近安装了VisualStudio11开发者预览版。在玩线程和期货时,我遇到了以下设置:

#include <future>
#include <iostream>

int foo(unsigned a, unsigned b)
{
    return 5;
}

int main()
{
    std::future<int> f = std::async(foo, 5, 7);
    std::cout << f.get();
}
#包括
#包括
int foo(无符号a,无符号b)
{
返回5;
}
int main()
{
std::future f=std::async(foo,5,7);

std::cout
std::future
应该是一个可变模板。这允许您向异步调用的函数传递任意数量的参数

不幸的是,VS 11的当前预览不支持可变模板,这意味着它没有向函数传递多个参数的机制

一句话:VS是错误的。我不确定是否有人报告这是一个bug,但这是一个已经众所周知的事实的直接结果,所以报告它可能不会/不会有很多好处,除了间接添加一个变量模板很重要的投票


如果您查看,他们(当前)有一个链接,一个调查,可以让你指出优先级,你会分配符合各种C++ 11的特点。不幸的是,它似乎是脱机,至少在目前。当你可以,填写它,以表明你考虑多变的模板,高优先级至少有一些机会做一些有益的。(虽然我显然不能保证任何事情)。

std::future
应该是一个可变模板。这允许您将任意数量的参数传递给异步调用的函数

不幸的是,VS 11的当前预览不支持可变模板,这意味着它没有向函数传递多个参数的机制

一句话:VS是错误的。我不确定是否有人报告这是一个bug,但这是一个已经众所周知的事实的直接结果,所以报告它可能不会/不会有很多好处,除了间接添加一个变量模板很重要的投票


如果您查看,他们(当前)有一个链接,一个调查,可以让你指出优先级,你会分配符合各种C++ 11的特点。不幸的是,它似乎是脱机,至少在目前。当你可以,填写它,以表明你考虑多变的模板,高优先级至少有一些机会做一些有益的。(虽然我显然不能保证任何事情)。

尝试下面的临时解决方法。(我在Visual Studio 11 Beta中尝试过)

std::future f=std::async(std::launch::any,foo,5,7);

由于C++11标准函数std::async()有两个重载,但MSVC/CRT无法正确解决重载问题。此外,std::launch::any
不是标准的一部分。(它需要
std::launch::async | std::launch::deferred
,但它们无法再次编译)

尝试下面的临时解决方法。(我在Visual Studio 11 Beta中尝试过)

std::future f=std::async(std::launch::any,foo,5,7);

由于C++11标准,函数std::async()有两个重载,但MSVC/CRT无法正确解决重载问题。此外,
std::launch::any
不是标准的一部分。(它需要
std::launch::async | std::launch::deferred
,但不能再次编译)

谢谢。库实现者通常会绕过变量模板的不足,这样就可以最多使用8个参数。我现在只是想知道为什么他们没有为std::async这样做。显而易见的解决方法:使用lambda:
std::async([&]{foo(5,7);})
。这可能是VS团队在这方面没有投入太多精力的主要原因之一。谢谢。库实现者通常会绕过变量模板的不足,这样就可以使用多达8个参数。我现在只是想知道为什么他们没有为std::async这样做。显而易见的解决方法:使用lambda:
std::async([&]{foo(5,7);})
。这可能是VS团队在这方面没有投入太多精力的主要原因之一。我发现了错误报告:我发现了错误报告:
std::future<int> f = std::async(std::launch::any, foo, 5, 7);