2016-02-23 3 views
4

Вот минимальный случай. Компиляция с "/ OpenMP" на Visual C++ 2015.Почему это не компилируется? (VC++ 2015, #pragma omp flush)

#include <vector> 
void main() 
{ 
    bool foo = false; 
    #pragma omp flush (foo) 
    std::vector<int> bar; 
} 

я получаю:

C2146 syntax error : missing ';' before identifier 'bar' 
C2275 'std::vector<int,std::allocator<_Ty>>' : illegal use of this type as an expression 
C2065 'bar' : undeclared identifier 

Если я закомментируйте #pragma, ошибка уходит.

Если я заменил std::vector на int, ошибка исчезнет.

Если я положил ; на линию, расположенную ниже #pragma, ошибка исчезнет.

+0

Вам не нужно включать 'omp.h', чтобы использовать прагмы? У меня нет ВС со мной прямо сейчас, я могу проверить это завтра утром :-) –

+0

Я скопировал его в свой VS2015, и он скомпилирован и прошел нормально. –

+0

@triple_r Просто добавлено '#include ', ошибка все еще существует. – Chungzuwalla

ответ

1

Краткий ответ на вопрос «Почему это не компилируется?» «это ошибка компилятора». Сообщение об ошибке в: https://connect.microsoft.com/VisualStudio/feedbackdetail/view/2420614 было закрыто как «fixed» .... »Этот элемент исправлен в текущей или предстоящей версии этого продукта [Visual Studio 2015]».

+0

Это основано на обновлении MSVC 2015 г. 3. Итак, я не уверен, что ваш ответ верен. Возможно, вам нужно проверить, что вы используете последнюю исправленную версию? – Mikhail

+0

@ Михаэль, я не вижу, как все, что вы написали, делает недействительным ответ. – Chungzuwalla

Смежные вопросы