Я использую TBB в нескольких местах в моем проекте.Но, похоже, что поскольку я обновляю Visual Studio с 15.6.X (последняя версия X) до 15.7.1, я получаю ошибку компиляции в нескольких местах, сообщая мне
[...] tbb\ task_group.h (94): ошибка C2530: «my_task»: ссылки должны быть инициализированы
Просмотр ссылочного кода ( tbb / task_group.h ):
//! Base class for types that should not be assigned.
class no_assign {
// Deny assignment
void operator=( const no_assign& );
public:
#if __GNUC__
//! Explicitly define default construction, because otherwise gcc issues gratuitous warning.
no_assign() {}
#endif /* __GNUC__ */
};
//! Base class for types that should not be copied or assigned.
class no_copy: no_assign {
//! Deny copy construction
no_copy( const no_copy& );
public:
//! Allow default construction
no_copy() {}
};
// ...
class ref_count_guard : internal::no_copy {
task& my_task; // compiler error occurs here
public:
ref_count_guard( task& t ) : my_task(t) {
my_task.increment_ref_count();
}
~ref_count_guard() {
my_task.decrement_ref_count();
}
};
Я не понимаю, почему компилятор жалуется, так как ссылка инициализируется конструктором.Найти проблему в моем коде также не так просто, потому что ошибка компилятора возникает в каждом исходном файле, использующем TBB, и я не думаю, что я что-то изменил со времени моей последней успешной компиляции (кроме обновления VS).
Одна возможность, которая приходит мне в голову, связана с этим вопросом .Если msvc каким-то образом наследует конструкторы базового класса по умолчанию, конструктор по умолчанию наследуется, объясняя ошибку.Но тестирование этот сценарий, кажется, опровергает его (при компиляции кода).
Почему msvc жалуется здесь?
Обновление
Этот минимальный пример воспроизводитошибка в моей системе:
#include <vector>
#include <tbb/tbb.h>
#include <tbb/flow_graph.h>
void main()
{
std::vector<int> src{1, 2, 3, 4, 5};
tbb::parallel_for_each(src.begin(), src.end(), [](int) { });
}
Обновление 2
Похоже, что только включение tbb/tbb.h
приводит к возникновению ошибки.Мне даже не нужно ничего звонить.Восстановление tbb с новой версией компилятора также не помогло.
Редактировать
Перекрестная проблема на github .