PC-Lint (au-misra-cpp.lnt) で次のエラーが発生します。
ConverterUtil.cpp(90): エラー 864: (情報 -- 変数 'transformValue' を含む式は、評価の順序に依存する可能性があります [ MISRA C++ ルール 5-2-10 ])
ConverterUtil.cpp(90): エラー 864: (情報 -- 変数 'transformValue' を含む式は、評価の順序に依存する可能性があります [ MISRA C++ ルール 5-2-10 ])
ConverterUtil.cpp(90): エラー 534: (警告 -- 関数 'std::transform(std::_String_iterator>>、std::_String_iterator>>、std::_String_iterator>>、int (*) の戻り値を無視しています(int))' (998 行目、ファイル C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\algorithm と比較) [MISRA C++ Rules 0-1-7 and 8-4-6], [ MISRA C++ ルール 0-3-2])
このコードで:
/**Conversion from std::string to bool*/
bool ConverterUtil::ConvertStdStringToBool(const std::string value)
{
std::string transformValue = value;
bool retValue = false;
std::transform(transformValue.begin(), transformValue.end(), transformValue.begin(), &::tolower);
if(transformValue == std::string(static_cast<const char *>("true")))
{
retValue = true;
}
return retValue;
}
変換で同じ std::string を入力と出力として使用するという事実が気に入らなかったと思いますが、出力として別の文字列を使用すると同じエラーが発生します。
std::transform を MISRA に準拠させることは可能ですか?