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:
(void)fclose(f);
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)))
References
- Terminology. Explicit type conversion. http://www.viva64.com/en/t/0015/
- Wikipedia. Type conversion. http://www.viva64.com/go.php?url=742