V2005. C-style explicit type casting is utilized. Consider using: static_cast/const_cast/reinterpret_cast
This diagnostic warning has been added at the request of users.
The analyzer allows you to detect explicit type conversions written in the old C language style in a C++ program. It is safer in the C++ language to convert types using operators static_cast, const_cast and reinterpret_cast.
The V2005 diagnostic rule helps to perform code refactoring and replace the old type conversion style with a new one. Sometimes it helps to detect errors.
Here are examples of constructs that will trigger this diagnostic message:
int i; double d; size_t s; void *p; ... i = int(p); //V2005 d = (double)d; //V2005 s = (size_t)(i); //V2005
The V2005 diagnostic message is not generated in three cases.
1. This is a C program.
2. The conversion target type is void. This type conversion is safe and is used to emphasize that there is a result which is not used anyhow. For example:
3. The type conversion is located inside a macro. If the analyzer generated the warning for macros, there would be a lot of reports when different system constants and macros are used. And you cannot fix them anyway. Here you are some examples:
#define FAILED(hr) ((HRESULT)(hr) < 0) #define SRCCOPY (DWORD)0x00CC0020 #define RGB(r,g,b)\ ((COLORREF)(((BYTE)(r)|((WORD)((BYTE)(g))<<8))\ |(((DWORD)(BYTE)(b))<<16)))