std :: promise <t>其中T必须是Visual Studio 2017中的默认构造?

时间:2018-04-14 11:19:45

标签: c++

我正在尝试在Visual Studio 2017中编译以下代码:

#include <future>

int main()
{
    std::promise<std::reference_wrapper<int>> promise;
    (void)promise;
}

但是,我收到以下错误:

  

错误C2512:'std :: reference_wrapper':没有合适的默认构造函数

然而它与GCC和Clang编好。

这是Visual Studio中的明确错误还是std :: promise的有效实现?

2 个答案:

答案 0 :(得分:2)

它看起来像是MSVC的标准库实现中的http://adldap.sourceforge.net/。 一个更简单的复制方案:

#include <future>
struct NoDefaultCtor
{
    NoDefaultCtor() = delete;
};
int main() {
    std::promise<NoDefaultCtor> p;
    return 0;
}

答案 1 :(得分:1)

我想你不需要std::reference_wrapper<int>。适用于std::promise的重载模板:

template<class R> class promise<R&>;

因此,您可以在Visual Studio 2017中修复代码:

#include <future>

int main()
{
    std::promise<int&> promise;
    (void)promise;
}