为什么std :: tuple的代码无法在MSVC上编译

时间:2019-11-07 16:23:14

标签: c++ visual-studio g++

我有一段使用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。我不认为nullptrint*是重点。也无法构建。非常感谢。

编辑:我当前正在使用Visual Studio 2019(版本16.3.8)

0 个答案:

没有答案