У меня есть фрагмент кода C ++, используемый std :: tuple. Я включил стандарт C ++ 17 в MSVC и g ++. Но его можно построить только с помощью 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
Я тоже пробовал это, похоже, он не может принять тип, у которого нет конструктора по умолчанию:
#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)