Проблема с использованием компилятора Intel C++ 16, обновление 3, в 32-разрядной версии

Мне было интересно, сталкивался ли кто-то с той же проблемой, которую я обнаружил вчера. Я использую ICC 16 (Intel C++ компилятор 16.0, обновление 3) на VS 2015. Я строю в 32 бит. Обратите внимание, что эта проблема не возникает в 64 битах.

Предположим, следующий код:

#include <iostream>
#include <memory>
using namespace std;

void func( shared_ptr<int> p )
{
    if ( p == nullptr )
    {
        cout << "nullptr" << endl;
    }
    else
    {
        cout << "! nullptr" << endl;
    }
}

//----------------------------------

int main( int argc, char* argv[] )
{
    shared_ptr<int> i = nullptr;
    // cout << "Hello!" << endl;
    func( nullptr );

    return 0;
}

Этот код работает правильно и выдает "nullptr".

Но если я раскомментирую cout "Hello!"<<endl;, shared_ptr<int> p передан в качестве аргумента func(...) является недействительным, поэтому он не равен nullptr (видел в if{}else{}) и происходит сбой при выходе из функции, потому что деструктор (из shared_ptr<int>) не может быть выполнен должным образом.

Обратите внимание, что это не происходит при компиляции в 64 бит. В 64 битах он всегда работает правильно. Ошибка возникает только в 32 битах.

Я перепробовал много параметров сборки, но не смог найти ни одного подозреваемого. Кто-нибудь сталкивался с такой же ошибкой?

Кроме того, я знаю, что есть обновление 4 для ICC 16 (но мне пока не удалось его загрузить). Это обновление решает эту проблему?

Любая помощь будет оценена!

РЕДАКТИРОВАТЬ 1

Я исправил звонок func(nullptr), На самом деле я должен написать nullptr непосредственно в (), не передавая автоматическую переменную.

0 ответов

Другие вопросы по тегам