Рассмотрим следующий фрагмент:
#include <map>
class A {
static std::map<int,int> theMap;
#pragma omp threadprivate(theMap)
};
std::map<int,int> A::theMap;
Компиляция с OpenMP завершается неудачно со следующим сообщением об ошибке:
$ g++ -fopenmp -c main.cpp
main.cpp:5:34: error: ‘threadprivate’ ‘A::theMap’ has incomplete type
Я этого не понимаю. Я могу скомпилировать без директивы #pragma
, что должно означать, что std :: map
не является , а не неполным. Я также могу скомпилировать, если карта является примитивным типом (double, int ...).
Как сделать глобальный статический std :: map
threadprivate
?