std::p romise<T> 其中 T 必须在 Visual Studio 2017 中默认构造?
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::p romise的有效实现?
看起来这是 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;
}
相关文章:
- 如何使用Visual Studio 2017在C++中为参数化对象数组使用唯一指针
- Visual Studio 2017循环自动向量化问题
- 有没有办法在远程设备上打开和编辑visual Studio 2017解决方案
- Visual Studio 2017 不允许我创建 C++ 专用模板
- Visual Studio 2017 停止工作,并在打开后显示许多控制台窗口
- 在Visual Studio 2017中使用recursive_directory_iterator
- 使用 CMake,Microsoft MPI 和 Visual Studio 2017 找不到 mpi.h
- Visual Studio 2017 中的 QtMetaObject 未解决的外部错误
- 智能感知不适用于Visual Studio 2017中的cmake项目
- 在Visual Studio 2017中创建的简单DLL不会在XP中加载
- Android NDK - 无法在 Visual Studio 2017 中调试
- Visual Studio 2017 - 调试和 Relese 配置,设置运行时库
- Visual Studio 2017 C++,不能使用 typeid() 获取信息对象,缺少指针?;
- 代码在Visual Studio 2017中不起作用,但在VS代码中工作
- 默认/样板代码在Visual Studio 2017中给我错误.E1574.虚幻.但构建成功了
- std::filesystem::create_directories Visual Studio 2017
- OpenCV 3 Visual Studio 2017 调试,调用堆栈没有.pdb文件
- Visual Studio 2017 15.5 Breaks C++ TypeDefs
- 在Visual Studio 2017中使用c ++组件构建python解决方案时出现问题
- 如何在Visual Studio 2017上将类方法设置为参数并将它们与lambda一起使用?