Ошибка: невозможно использовать вектор unsigned long long [2] для инициализации вектора unsigned long long [2]

Мы тестируем под Sun Studio 12.3. Мы обнаруживаем ошибку компилятора, которой нет в версии 12.4 и выше. Его нет под 12.1 и ранее, но это потому, что компилятор имеет проблемы с инструкциями AES. Его также нет в других компиляторах, таких как Clang, GCC, ICPC и VC ++. Ошибка:

/opt/solarisstudio12.3/bin/CC -DDEBUG -g3 -xO0 -D__SSE2__ -D__SSE3__ -D__SSSE3__ \
-D__SSE4_1__ -D__SSE4_2__ -D__AES__ -D__PCLMUL__ -D__RDRND__ -D__RDSEED__ -D__AVX__ \
-D__AVX2__ -D__BMI__ -D__BMI2__  -native -m64 -KPIC -template=no%extdef -c rijndael.cpp

"/opt/solarisstudio12.3/prod/include/CC/Cstd/algorithm", line 283: Error: Cannot use vector unsigned long long[2] to initialize vector unsigned long long[2].
"rijndael.cpp", line 277:     Where: While instantiating "std::swap<vector unsigned long long[2]>(unsigned long long(&)[2], unsigned long long(&)[2])".
"rijndael.cpp", line 277:     Where: Instantiated from non-template code.
1 Error(s) detected.
gmake: *** [rijndael.o] Error 2
gmake: *** Waiting for unfinished jobs....
ERROR: failed to make cryptest.exe

Код в вопросе:

std::swap(*(__m128i*)(rk), *(__m128i*)(rk+4*m_rounds));

У меня есть пара вопросов:

  • В чем проблема с компилятором?
  • Каков наилучший способ устранить ошибку?

Я должен задать второй вопрос, потому что я не уверен в SunCC и __m128i Тип дан, я мог бы использовать сырье memcpyпопробуйте написать свой собственный своп, или даже попробуйте iter_swap без разыменования.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]