我有一段使用std :: tuple的C ++代码。我在MSVC和g ++中都启用了C ++ 17标准。但是它只能由g ++构建。
如下:
#include <future>
#include <utility>
#include <typeindex>
int main()
{
std::packaged_task<std::tuple<std::type_index, int>()> task{
[]() {return std::make_tuple(std::type_index(typeid(int)), 3); }
};
}
MSVC错误:
严重性代码描述项目文件行抑制状态 错误C2512'std :: tuple :: tuple':没有适当的默认构造函数可使用TestConsole C:\ Program Files(x86)\ Microsoft Visual Studio \ 2019 \ Community \ VC \ Tools \ MSVC \ 14.23.28105 \ include \ future 213 < / p>
我也尝试过这种方法,似乎它不能接受没有任何默认构造函数的类型:
#include <future>
#include <utility>
class Foo
{
public:
Foo() = delete;
Foo(int a) { a_ = a; }
int a_;
};
int main()
{
std::packaged_task<std::tuple<Foo, int>()> task{
[]() {return std::make_tuple(Foo(3), 3); }
};
}
我想知道是什么原因引起的问题以及如何解决(或者有更好的方法吗?)。
任何帮助将不胜感激。
编辑:我将int*
更改为int
。我不认为nullptr
或int*
是重点。也无法构建。非常感谢。
编辑:我当前正在使用Visual Studio 2019(版本16.3.8)