繁体   English   中英

标准::承诺<T>在 Visual Studio 2017 中,T 必须是默认可构造的吗?

[英]std::promise<T> where T must be default constructible in Visual Studio 2017?

我正在尝试在 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 的有效实现?

看起来这是 MSVC 标准库实现中的一个已知问题 一个更简单的再现场景:

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

我想你不需要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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM