Почему код std :: tuple не может скомпилироваться в MSVC - PullRequest
1 голос
/ 07 ноября 2019

У меня есть фрагмент кода 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)

...