c++ warning correspondence table (Clang/GCC and Visual Studio)
| Summary | Visual Studio | GCC | Clang | Clang message | is Same |
|---|---|---|---|---|---|
| UNKNOWN WARNING | C4000 | - | - | ||
| too many actual parameters for macro | /W1 C4002 | error | error | too many arguments provided to function-like macro invocation | |
| not enough actual parameters for macro | /W1 C4003 | error | error | too few arguments provided to function-like macro invocation | |
| macro redefinition | /W1 C4005 | warning | -Wmacro-redefined | 'IDENTIFIER' macro redefined | ☑️ |
| #undef expected an identifier | /W1 C4006 | error | error | macro name missing | |
| 'function' : must be 'attribute' | /W2 C4007 | - | - | - | |
| 'identifier' : 'attribute' attribute ignored | /W2,3 C4008 | error | error | 'main' is not allowed to be declared inline | |
| single-line comment contains line-continuation character | /W1 C4010 | -Wcomment | -Wcomment | multi-line // comment | ☑️ |
| 'function' undefined; assuming extern returning int | /W3 C4013 | ||||
| 'identifier' : type of bit field must be integral | error | error | bit-field 'IDENTIFIER' has non-integral type 'TYPE' | ||
| 'expression' : signed/unsigned mismatch | /W3 C4018 | -Wsign-compare | -Wsign-compare | comparison of integers of different signs: 'unsigned TYPE' and 'TYPE' | ☑️ |
| empty statement at global scope | /W4 C4019 | - | -Wextra-semi-stmt | empty expression statement has no effect; remove unnecessary ';' to silence this warning | ☑️ |
| 'function' : too many actual parameters | error | error | |||
| 'function' : pointer mismatch for actual parameter 'number' | /W1 C4022 | ||||
| 'symbol' : based pointer passed to unprototyped function : parameter number | /W3 C4023 | ||||
| 'function' : different types for formal and actual parameter 'number' | /W1 C4024 | ||||
| 'number' : based pointer passed to function with variable arguments: parameter number | /W1 C4025 | ||||
| function declared with formal parameter list | /W1 C4026 | ||||
| function declared without formal parameter list | /W1 C4027 | ||||
| formal parameter 'number' different from declaration | /W1 C4028 | - | - | ||
| declared formal parameter list different from definition | /W1 C4029 | ||||
| first formal parameter list longer than the second list | /W1 C4030 | ||||
| second formal parameter list longer than the first list | /W1 C4031 | ||||
| formal parameter 'number' has different type when promoted | /W4 C4032 | - | - | ||
| 'function' must return a value | /W1 C4033 | error | error | non-void function 'test_1' should return a value | |
| sizeof returns 0 | /W1 C4034 | ||||
| 'function': no return value | /W3 C4035 | ||||
| unnamed 'type' as actual parameter | /W1 C4036 | - | - | ||
| 'modifier' : illegal ambient class modifier | /W1 C4038 | - | - | ||
| compiler limit : terminating browser output | /W1 C4041 | - | - | ||
| 'identifier' : has bad storage class | /W1 C4042 | - | - | ||
| 'array' : array bounds overflow | /W1 C4045 | ||||
| 'operator' : 'identifier1' differs in levels of indirection from 'identifier2' | error | error | |||
| different declared array subscripts : 'identifier1' and 'identifier2' | /W1 C4048 | ||||
| compiler limit : terminating line number emission | /W1 C4049 | ||||
| type conversion; possible loss of data | /W2 C4051 | ||||
| function declarations different; one contains variable arguments | /W1 C4052 | ||||
| one void operand for '?:' | /W4 C4053 | ||||
| 'conversion' : from data pointer 'type1' to function pointer 'type2' | - | - | |||
| overflow in floating point constant arithmetic | /W2 C4056 ?? | ||||
| 'operator' : 'identifier1' indirection to slightly different base types from 'identifier2' | /W4 C4057 C-Only | ||||
| switch statement contains no 'case' or 'default' labels | C4060 | NOWARN | NOWARN | ||
| case 'identifier' is not a valid value for switch of enum 'enumeration' | C4063 | -Wswitch | -Wswitch | case value not in enumerated type 'Hoge' | ☑️ |
| switch of incomplete enum 'enumeration' | C4064 | error | error | ||
| switch statement contains 'default' but no 'case' labels | C4065 | NOWARN | NOWARN | ||
| enumerator 'identifier' in switch of enum 'enumeration' is not explicitly handled by a case label | /W4 C4061 Off | -Wswitch-enum | -Wswitch-enum | enumeration value 'NAME' not explicitly handled in switch | ☑️ |
| enumerator 'identifier' in switch of enum 'enumeration' is not handled | /W4 C4062 Off | -Wswitch | -Wswitch | enumeration value 'NAME' not handled in switch | ☑️ |
| characters beyond first in wide-character constant ignored | /W3 C4066 | ||||
| unexpected tokens following preprocessor directive - expected a newline | /W1 C4067 | error,warning,-Wendif-labels | error, -Wextra-tokens | extra tokens at end of TOKEN directive | ☑️ |
| unknown pragma | /W1 C4068 | -Wunknown-pragmas | -Wunknown-pragmas | unknown pragma ignored | ☑️ |
| long double is the same precision as double | C4069 | ||||
| initializers put in library initialization area | /W3 C4073 | -Wunknown-pragmas | -Wunknown-pragmas | ||
| initializers put in compiler reserved initialization area | /W1 C4074 | -Wunknown-pragmas | -Wunknown-pragmas | ||
| initializers put in unrecognized initialization area | /W1 C4075 | -Wunknown-pragmas | -Wunknown-pragmas | ||
| 'type modifier' : can not be used with type 'typename' | /W1 C4076 | error | error | ||
| unknown check_stack option | /W1 C4077 | -Wunknown-pragmas | -Wunknown-pragmas | ||
| unexpected token 'token' | /W1 C4079 | -Wpragma | -Wignored-pragmas | ||
| expected identifier for segment name; found 'symbol' | /W1 C4080 | -Wunknown-pragmas | -Wunknown-pragmas | ||
| expected 'token1'; found 'token2' | /W1 C4081 | -Wunknown-pragmas | -Wunknown-pragmas | ||
| expected 'token'; found identifier 'identifier' | /W1 C4083 | -Wunknown-pragmas | -Wunknown-pragmas | ||
| expected pragma parameter to be 'on' or 'off' | /W1 C4085 | -Wunknown-pragmas | -Wunknown-pragmas | ||
| expected pragma parameter to be '1', '2', '4', '8', or '16' | /W1 C4086 | -Wpragma | -Wignored-pragmas | ||
| 'function' : declared with 'void' parameter list | error | error | |||
| 'function' : pointer mismatch in actual parameter 'number', formal parameter 'number' | /W1 C4088 | ||||
| 'function' : different types in actual parameter 'number', formal parameter 'number' | /W1 C4089 | ||||
| 'operation' : different 'modifier' qualifiers | /W1 C4090 C-Only | ||||
| 'keyword' : ignored on left of 'type' when no variable is declared | /W1 C4091 | error | error | ||
| sizeof returns 'unsigned long' | /W4 C4092 | ||||
| untagged 'token' declared no symbols | /W2 C4094 | error | error | ||
| 'a': interface is not a COM interface; will not be emitted to IDL | /W1 C4096 | - | - | ||
| expected pragma parameter to be 'restore' or 'off' | /W1 C4097 | -Wunknown-pragmas | -Wunknown-pragmas | ||
| 'function' : void function returning a value | /W1 C4098 | ||||
| 'identifier' : type name first seen using 'objecttype1' now seen using 'objecttype2' | /W2 C4099 | NOWARN | -Wmismatched-tags | '?IDENTIFIER_' defined as a class here but previously declared as a struct; this is valid, but may result in linker errors under the Microsoft C++ ABI | ☑️ |
| 'identifier' : unreferenced formal parameter | /W4 C4100 | -Wunused-parameter | -Wunused-parameter | unused parameter 'IDENTIFIER' | ☑️ |
| 'identifier' : unreferenced local variable | /W3 C4101 | -Wunused-variable | -Wunused-variable | unused variable 'IDENTIFIER' | ☑️ |
| 'label' : unreferenced label | /W3 C4102 | -Wunused-label | -Wunused-label | unused label 'LABEL' | ☑️ |
| 'filename' : alignment changed after including header, may be due to missing #pragma pack(pop) | /W1 C4103 | NOWARN | -Wpragma-pack | unterminated '#pragma pack (push, ...)' at end of file | ☑️ |
| unexpected identifier 'identifier' | /W1 C4109 | -Wunknown-pragmas | -Wunknown-pragmas | ||
| #line requires an integer between 1 and number | /W1,4 C4112 | -pedantic | -pedantic (-Wgnu-zero-line-directive) | #line directive with zero argument is a GNU extension | ☑️ |
| 'identifier1' differs in parameter lists from 'identifier2' | /W1 C4113 | ||||
| same type qualifier used more than once | /W1 C4114 | error | -Wduplicate-decl-specifier | duplicate 'volatile' declaration specifier | ☑️ |
| 'type' : named type definition in parentheses | /W1,4 C4115 | ||||
| unnamed type definition in parentheses | /W1 C4116 | ||||
| macro name 'name' is reserved; 'Command' ignored | /W1 C4117 | -Wbuiltin-macro-redefined | -Wbuiltin-macro-redefined | redefining builtin macro | ☑️ |
| different bases 'base1' and 'base2' specified | /W1 C4119 | ||||
| based/unbased mismatch | /W1 C4120 | ||||
| 'symbol' : alignment of a member was sensitive to packing | /W4 C4121 | NOWARN | NOWARN | ||
| 'function' : alloc_text applicable only to functions with C linkage | /W1 C4122 | ||||
| different base expressions specified | C4123 | ||||
| __fastcall with stack checking is inefficient | /W1 C4124 | - | - | ||
| decimal digit terminates octal escape sequence | /W4 C4125 | NOWARN | NOWARN | ||
| conditional expression is constant | /W4 C4127 | NOWARN | NOWARN | ||
| 'character' : unrecognized character escape sequence | /W1 C4129 | warning | -Wunknown-escape-sequence | unknown escape sequence '/' | ☑️ |
| 'operator' : logical operation on address of string constant | /W4 C4130 | -Waddress | -Wstring-compare | result of comparison against a string literal is unspecified (use an explicit string comparison function instead) | ☑️ |
| 'function' : uses old-style declarator | /W4 C4131 C-Only | ||||
| 'object' : const object should be initialized | /W4 C4132 C-Only | ||||
| 'type' : incompatible types - from 'type1' to 'type2' | /W3 C4133 | ||||
| 'function': no return value from floating-point function | C4137 | ||||
| '*/' found outside of comment | /W1 C4138 | NOWARN | NOWARN | ||
| 'modifier' : used more than once | /W1 C4141 | error | -Wduplicate-decl-specifier | duplicate 'inline' declaration specifier | ☑️ |
| benign redefinition of type | /W1 C4142 C-Only | ||||
| pragma 'same_seg' not supported; use __based allocation | /W1 C4143 | - | - | ||
| 'expression' : relational expression as switch expression | /W1 C4144 | NOWARN | -Wswitch-bool | switch condition has boolean value | ☑️ |
| 'expression1' : relational expression as switch expression; possible confusion with 'expression2' | /W1 C4145 | NOWARN | -Wswitch-bool | switch condition has boolean value | ☑️ |
| unary minus operator applied to unsigned type, result still unsigned | /W2 C4146 | NOWARN | NOWARN | ||
| deletion of pointer to incomplete type 'type'; no destructor called | /W2 C4150 | -Wdelete-incomplete | -Wdelete-incomplete | deleting pointer to incomplete type 'IncClass' may cause undefined behavior | ☑️ |
| non standard extension, function/data ptr conversion in expression | /W4 C4152 | - | - | ||
| function/data pointer conversion in expression | /W1 C4153 | - | - | ||
| deletion of an array expression; conversion to pointer supplied | /W1 C4154 | warning | error | ||
| deletion of an array expression without using the array form of 'delete' | /W1 C4155 | NOWARN | warning | 'delete' applied to a pointer-to-array type 'int (*)[10]' treated as 'delete[]' | |
| deletion of an array expression without using the array form of 'delete'; array form substituted | /W2 C4156 | NOWARN | warning | 'delete' applied to a pointer-to-array type 'int (*)[10]' treated as 'delete[]' | |
| pragma was ignored by C compiler | /W1 C4157 | - | - | ||
| assuming #pragma pointers_to_members(full_generality, inheritance) | /W1 C4158 | - | - | ||
| #pragma pragma(pop,...) : has popped previously pushed identifier 'identifier' | /W3 C4159 | - | - | ||
| #pragma (pop,...) : did not find previously pushed identifier 'identifier' | /W1 C4160 | - | - | ||
| #pragma pragma(pop...) : more pops than pushes | /W3 C4161 | - | - | ||
| 'identifier' : no function with C linkage found | /W1 C4162 | - | - | ||
| 'identifier' : not available as an intrinsic function | /W1 C4163 | - | - | ||
| 'identifier' : intrinsic function not declared | /W1 C4164 | - | - | ||
| 'HRESULT' is being converted to 'bool'; are you sure this is what you want? | /W1 C4165 | - | - | ||
| illegal calling convention for constructor/destructor | /W1 C4166 | - | - | ||
| function : only available as an intrinsic function | /W1 C4167 | - | - | ||
| compiler limit : out of debugger types, delete program database 'database' and rebuild | /W1 C4168 | - | - | ||
| returning address of local variable or temporary | /W1 C4172 | -Wreturn-local-addr | -Wreturn-stack-address | returning reference to local temporary object | ☑️ |
| 'name' : not available as a #pragma component | /W1 C4174 | - | - | ||
| #pragma component(browser, on) : browser info must initially be specified on the command line | /W1 C4175 | - | - | ||
| 'subcomponent' : unknown subcomponent for #pragma component browser | /W1 C4176 | - | - | ||
| #pragma pragma should be at global scope | /W1 C4177 | - | - | ||
| case constant 'constant' too big for the type of the switch expression | /W1 C4178 | error -Wnarrowing | error -Wc++11-narrowing (-Wswitch -std=c++98) | case value evaluates to VALUE, which cannot be narrowed to type 'int' | ☑️ |
| '//' : parsed as '/' and '/': confusion with standard '//' comments | /W1 C4179 | ||||
| qualifier applied to function type has no meaning; ignored | /W1 C4180 | NOWARN | -Wignored-qualifiers | 'NAME' qualifier on function type 'IDENTIFIER' (aka 'SIG') has no effect | ☑️ |
| qualifier applied to reference type; ignored | C4181 | ||||
| #include nesting level is 'number' deep; possible infinite recursion | /W1 C4182 | error | error | ||
| 'identifier': missing return type; assumed to be a member function returning 'int' | error | error | |||
| ignoring unknown #import attribute 'attribute' | /W1 C4185 | - | - | ||
| #import attribute 'attribute' requires count arguments; ignored | /W1 C4186 | - | - | ||
| #import attributes 'attribute1' and 'attribute2' are incompatible; both ignored | /W1 C4187 | - | - | ||
| constant expression is not integral | C4188 | - | - | ||
| 'identifier' : local variable is initialized but not referenced | /W4 C4189 | -Wunused-variable | -Wunused-variable | unused variable 'NAME' | ☑️ |
| 'identifier1' has C-linkage specified, but returns UDT 'identifier2' which is incompatible with C | /W1 C4190 | NOWARN | -Wreturn-type-c-linkage | 'func' has C-linkage specified, but returns user-defined type 'X' which is incompatible with C | ☑️ |
| 'operator/operation' : unsafe conversion from 'type of expression' to 'type required' | /W3 C4191 | - | - | ||
| automatically excluding 'name' while importing type library 'library' | /W3 C4192 | - | - | ||
| #pragma warning(pop): no matching '#pragma warning(push)' | C4193 | - | - | ||
| #pragma start_map_region cannot be nested; ignored | C4194 | - | - | ||
| #pragma stop_map_region used without matching #pragma start_map_region; ignored | C4195 | - | - | ||
| expected '%$L' or '%$L'; found '%$L' | C4196 | - | - | ||
| 'type' : top-level volatile in cast is ignored | /W3 C4197 | -Wignored-qualifiers | NOWARN | ☑️ |
| Summary | Visual Studio | GCC | Clang | Clang message | is Same |
|---|---|---|---|---|---|
| nonstandard extension used : zero-sized array in struct/union | /W2,4 C4200 | -Wpedantic | -pedantic (-Wzero-length-array) | zero size arrays are an extension | ☑️ |
| nonstandard extension used : nameless struct/union | /W4 C4201 | -Wpedantic | -pedantic (-Wgnu-anonymous-struct) | anonymous structs are a GNU extension | ☑️ |
| nonstandard extension used : '...': prototype parameter in name list illegal | /W4 C4202 | error | error | ||
| nonstandard extension used : non-constant aggregate initializer | /W4 C4203 | NOWARN | NOWARN | ||
| nonstandard extension used : static function declaration in function scope | /W4 C4205 | ||||
| nonstandard extension used : translation unit is empty | /W4 C4206 | ||||
| nonstandard extension used : extended initializer form | /W4 C4207 | ||||
| nonstandard extension used : delete [exp] - exp evaluated but ignored | /W4 C4208 | error | error | ||
| nonstandard extension used : function given file scope | /W4 C4210 | error | error | ||
| nonstandard extension used : redefined extern to static | /W4 C4211 | error | error | ||
| nonstandard extension used : function declaration used ellipsis | /W4 C4212 | NOWARN | NOWARN | ||
| nonstandard extension used : cast on l-value | /W4 C4213 | error | error | ||
| nonstandard extension used : bit field types other than int | /W4 C4214 C-Only | - | - | ||
| nonstandard extension used : long float | /W1 C4215 | error | error | 'long float' is invalid | |
| nonstandard extension used : float long | /W1 C4216 | error | error | 'long float' is invalid | |
| nonstandard extension used : must specify at least a storage class or a type | /W1 C4218 C-Only | ||||
| varargs matches remaining parameters | /W4 C4220 C-Only | ||||
| nonstandard extension used : 'identifier' : cannot be initialized using address of automatic variable | /W4 C4221 C-Only | ||||
| nonstandard extension used : non-lvalue array converted to pointer | /W1,4 C4223 | ||||
| nonstandard extension used : formal parameter 'identifier' was previously defined as a type | /W1 C4224 | NOWARN | NOWARN | ||
| nonstandard extension used : 'keyword' is an obsolete keyword | /W1 C4226 | - | - | ||
| anachronism used : qualifiers on reference are ignored | /W1 C4227 | error | error | ||
| nonstandard extension used : qualifiers after comma in declarator list are ignored | /W1 C4228 | error | error | ||
| anachronism used : modifiers on data are ignored | /W1 C4229 | - | - | ||
| anachronism used : modifiers/qualifiers interspersed; qualifier ignored | /W1 C4230 | - | - | ||
| nonstandard extension used : 'identifier' : address of dllimport 'dllimport' is not static, identity not guaranteed | /W4 C4232 | - | - | ||
| nonstandard extension used : 'keyword' keyword only supported in C++, not C | /W4 C4233 | ||||
| nonstandard extension used: 'keyword' keyword reserved for future use | /W4 C4234 | ||||
| nonstandard extension used : 'keyword' keyword not supported on this architecture | /W4 C4235 | ||||
| 'keyword' keyword is not yet supported, but reserved for future use | error | error | |||
| nonstandard extension used : class rvalue used as lvalue | /W4 C4238 | error -fpermissive | error -Waddress-of-temporary | taking the address of a temporary object of type 'C' | |
| nonstandard extension used : 'token' : conversion from 'type' to 'type' | /W4 C4239 | error | error | ||
| nonstandard extension used : access to 'classname' now defined to be 'access specifier', previously it was defined to be 'access specifier' | /W3 C4240 | error | error | 'NAME' redeclared with 'public' access | |
| 'identifier' : conversion from 'type1' to 'type2', possible loss of data | /W4 C4242 | -Wconversion | -Wimplicit-int-conversion | implicit conversion loses integer precision: 'TYPE' to 'TYPE' | ☑️ |
| 'conversion type' conversion exists from 'type1' to 'type2', but is inaccessible | /W3 C4243 | NOWARN | NOWARN | ||
| 'argument' : conversion from 'type1' to 'type2', possible loss of data | /W2 C4244 | -Wfloat-conversion | -Wfloat-conversion | prog.cc:8:14: warning: implicit conversion turns floating-point number into integer: 'TYPE' to 'TYPE' | ☑️ |
| 'conversion' conversion from 'type1' to 'type2', possible loss of data | /W3,4 C4244 | -Wconversion | -Wconversion | ☑️ | |
| 'conversion' : conversion from 'type1' to 'type2', signed/unsigned mismatch | /W4 C4245 | -Wsign-conversion | -Wsign-conversion | implicit conversion changes signedness: 'TYPE' to 'TYPE' | ☑️ |
| 'class1' : inherits 'class2::member' via dominance | /W2 C4250 | NOWARN | NOWARN | ||
| 'type' : class 'type1' needs to have dll-interface to be used by clients of class 'type2' | /W1 C4251 | - | - | ||
| 'operator' : conversion from 'type1' to 'type2', possible loss of data | /W4 C4254 | NOWARN | NOWARN | ||
| 'function' : no function prototype given: converting '()' to '(void)' | /W4 C4255 C-Only | - | - | ||
| 'function' : constructor for class with virtual bases has '...'; calls may not be compatible with older versions of Visual C++ | /W4 C4256 | - | - | ||
| 'variable' : definition from the for loop is ignored; the definition from the enclosing scope is used" | /W1 C4258 | NOWARN | NOWARN | ||
| 'function' : member function does not override any base class virtual member function | /W4 C4263 | -Woverloaded-virtual | -Woverloaded-virtual | 'FUNCTION' hides overloaded virtual function | ☑️ |
| 'virtual_function' : no override available for virtual member function from base 'class'; function is hidden | /W1 C4264 | ||||
| class' : class has virtual functions, but destructor is not virtual | /W3 C4265 | -Wnon-virtual-dtor | -Wnon-virtual-dtor | 'CLASS_' has virtual functions but non-virtual destructor | ☑️ |
| 'function' : no override available for virtual member function from base 'type'; function is hidden | /W4 C4266 | ||||
| 'var' : conversion from 'size_t' to 'type', possible loss of data | /W3 C4267 | -Wconversion | -Wshorten-64-to-32 | implicit conversion loses integer precision: 'TYPE' (aka 'TYPE') to 'TYPE' | ☑️ |
| 'identifier' : 'const' static/global data initialized with compiler generated default constructor fills the object with zeros | /W4 C4268 | error -fpermissive | error | ||
| 'identifier' : 'const' automatic data initialized with compiler generated default constructor produces unreliable results | /W1 C4269 | error -fpermissive | error | ||
| 'function' : is marked __declspec(dllimport); must specify native calling convention when importing a function. | /W1 C4272 | - | - | ||
| 'function' : inconsistent DLL linkage | /W1 C4273 | - | - | ||
| #ident ignored; see documentation for #pragma comment(exestr, 'string') | /W1 C4274 | - | - | ||
| non - DLL-interface class 'class_1' used as base for DLL-interface class 'class_2' | /W2 C4275 | - | - | ||
| 'function' : no prototype provided; assumed no parameters | /W1 C4276 | ||||
| imported item 'classname::member' exists as both data member and function member; data member ignored | /W1 C4277 | - | - | ||
| 'identifier': identifier in type library 'tlb' is already a macro; use the 'rename' qualifier | /W3 C4278 | - | - | ||
| 'identifier': identifier in type library 'library' is a keyword; use the 'rename' qualifier | /W3 C4279 | ||||
| 'operator ->' was self recursive through type 'type' | /W3 C4280 | error | error | ||
| 'operator ->' recursion occurred through type 'type' | /W3 C4281 | error | error | ||
| then through type 'type' | /W3 C4282 | ||||
| and through type 'type' | /W3 C4283 | ||||
| return type for 'identifier::operator ->' is recursive if applied using infix notation | /W2 C4285 | NOWARN | NOWARN | ||
| 'type1' : is caught by base class ('type2') on line number | /W1 C4286 | warning | -Wexceptions | exception of type 'D' will be caught by earlier handler | ☑️ |
| 'operator' : unsigned/negative constant mismatch | /W3 C4287 | -Wsign-compare | -Wsign-compare | comparison of integers of different signs: 'TYPE' and 'TYPE' | ☑️ |
| nonstandard extension used : 'var' : loop control variable declared in the for-loop is used outside the for-loop scope; it conflicts with the declaration in the outer scope | /W1 C4288 | -Wunreachable-code | -Wunreachable-code | ☑️ | |
| nonstandard extension used : 'var' : loop control variable declared in the for-loop is used outside the for-loop scope | /W4 C4289 | - | - | ||
| C++ exception specification ignored except to indicate a function is not __declspec(nothrow) | /W3 C4290 | - | - | ||
| 'declaration' : no matching operator delete found; memory will not be freed if initialization throws an exception | /W1 C4291 | NOWARN | NOWARN | ||
| 'operator' : shift count negative or too big, undefined behavior | /W1 C4293 | -Wshift-count-overflow | -Wshift-count-overflow | shift count >= width of type | ☑️ |
| 'array' : array is too small to include a terminating null character | /W4 C4295 C-Only | - | - | ||
| 'operator' : expression is always false | /W4 C4296 | -Wtype-limits | -Wtautological-unsigned-zero-compare | result of comparison of unsigned expression < 0 is always false | ☑️ |
| 'function' : function assumed not to throw an exception but does | /W1 C4297 | - | - | ||
| 'identifier': identifier in type library 'library' is already a macro; renaming to '__identifier' | /W4 C4298 | ||||
| 'identifier': identifier in type library 'library' is a keyword; renaming to '__identifier' | /W4 C4299 | ||||
| 'derived_class::function': overriding virtual function only differs from 'base_class::function' by const/volatile qualifier | C4301 | ||||
| 'conversion' : truncation from 'type 1' to 'type 2' | /W2 C4302 | error -fpermissive | error | ||
| C-style cast from 'type1' to 'type2' is deprecated, use static_cast, __try_cast or dynamic_cast | C4303 | -Wold-style-cast | -Wold-style-cast | use of old-style cast | ☑️ |
| 'context' : truncation from 'type1' to 'type2' | /W1 C4305 | -Wfloat-conversion | -Wimplicit-float-conversion | implicit conversion loses floating-point precision: 'double' to 'float' | ☑️ |
| 'identifier' : conversion from 'type1' to 'type2' of greater size | /W3 C4306 | ||||
| 'operator' : integral constant overflow | /W2 C4307 | -Woverflow | -Winteger-overflow | overflow in expression; result is - XXX with type 'TYPE' | |
| negative integral constant converted to unsigned type | /W2 C4308 | -Wsign-conversion | -Wsign-conversion | implicit conversion changes signedness: 'TYPE' to 'TYPE' | ☑️ |
| 'conversion' : truncation of constant value | /W2 C4309 | -Wconversion | -Wconstant-conversion | implicit conversion from 'TYPE' to 'TYPE' changes value from VALUE to - VALUE | ☑️ |
| cast truncates constant value | /W3 C4310 | NOWARN | NOWARN | ||
| 'variable' : pointer truncation from 'type' to 'type' | /W1 C4311 | error -fpermissive | error | ||
| 'operation' : conversion from 'type1' to 'type2' of greater size | /W1 C4312 | -Wint-to-pointer-cast | -Wint-to-void-pointer-cast | cast to 'void *' from smaller integer type 'int' | ☑️ |
| 'function' : 'format specifier' in format string conflicts with argument number of type 'type' | /W1 C4313 | -Wformat | -Wformat | format specifies type 'TYPE' but the argument has type 'TYPE' | ☑️ |
| expected pragma parameter to be '32' or '64' | C4314 | - | - | ||
| 'classname': 'this' pointer for member 'member' may not be aligned 'alignment' as expected by the constructor | /W4 C4315 | ||||
| Object allocated on the heap may not be aligned for this type. | /W3 C4316 | - | - | ||
| 'printf_family' : not enough arguments passed for format string | /W1 C4317 | -Wformat-extra-args | -Wformat-extra-args | data argument not used by format string | ☑️ |
| passing constant zero as the length to memset | C4318 | -Wmemset-transposed-args | -Wmemset-transposed-args | 'size' argument to memset is '0'; did you mean to transpose the last two arguments? | ☑️ |
| '~' : zero extending 'type1' to 'type2' of greater size | /W1 C4319 | NOWARN | NOWARN | ||
| automatically generating an IID for interface 'interface' | /W1 C4321 | - | - | ||
| automatically generating a CLSID for class 'class' | /W1 C4322 | - | - | ||
| re-using registered CLSID for class 'class' | /W1 C4323 | - | - | ||
| 'struct_name' : structure was padded due to __declspec(align()) | /W4 C4324 | - | - | ||
| attributes for standard section 'section' ignored | /W1 C4325 | - | - | ||
| return type of 'function' should be 'type1' instead of 'type2' | /W1 C4326 | error | error | ||
| 'assignment': indirection alignment of LHS ('alignment1') is greater than RHS ('alignment2') | C4327 | ||||
| 'function': indirection alignment of formal parameter parameter_number (parameter_alignment) is greater than the actual argument alignment (argument_alignment) | C4328 | ||||
| __declspec(align()) is ignored on enum | /W1 C4329 | - | - | ||
| attribute 'attribute' for section 'section' ignored | /W1 C4330 | ||||
| 'operator' : right shift by too large amount, data loss | /W1 C4333 | NOWARN | NOWARN | ||
| 'operator' : result of 32-bit shift implicitly converted to 64 bits (was 64-bit shift intended?) | /W3 C4334 | NOWARN | NOWARN | ||
| Mac file format detected: please convert the source file to either DOS or UNIX format | C4335 | ||||
| import cross-referenced type library 'type_lib1' before importing 'type_lib2' | /W4 C4336 | - | - | ||
| cross-referenced type library 'typelib1' in 'typelib2' is being automatically imported | /W4 C4337 | - | - | ||
| #pragma directive: standard section 'section' is used | /W4 C4338 | - | - | ||
| 'type' : use of undefined type detected in WinRT or CLR meta-data - use of this type may lead to a runtime exception | /W4 C4339 clr | - | - | ||
| 'value' : value wrapped from positive to negative value | /W1 C4340 | ||||
| behavior change: 'function' called, but a member operator was called in previous versions | /W1 C4342 | NOWARN | NOWARN | ||
| #pragma optimize("g",off) overrides /Og option | /W4 C4343 | - | - | ||
| behavior change: use of explicit template arguments results in call to 'function' | |||||
| 'name' : dependent name is not a type | /W1 C4346 | error | error | ||
| 'type' : redefinition of default parameter : parameter number | /W1 C4348 | error | error | ||
| behavior change: 'member1' called instead of 'member2' | /W1 C4350 | NOWARN | NOWARN | ||
| 'identifier': intrinsic function already defined | /W1 C4352 | ||||
| nonstandard extension used: constant 0 as function expression. Use '__noop' function intrinsic instead | /W1 C4353 | NOWARN | NOWARN | ||
| 'this' : used in base member initializer list | C4355 | NOWARN | NOWARN | ||
| 'member' : static data member cannot be initialized via derived class | /W2 C4356 | error -fpermissive | error | ||
| param array argument in formal argument list for delegate 'del' ignored when generating 'function' | /W3 C4357 | - | - | ||
| 'operator': return type of combined delegates is not 'void'; returned value is undefined | /W1 C4358 | - | - | ||
| 'type': actual alignment (8) is greater than the value specified in __declspec(align()) | /W3 C4359 | - | - | ||
| 'type': alignment greater than 8 bytes is not supported by CLR | /W2 C4362 clr | - | - | ||
| #using for assembly 'file' previously seen at location(line_number) without as_friend attribute; as_friend not applied | /W1 C4364 | - | - | ||
| 'action' : conversion from 'type_1' to 'type_2', signed/unsigned mismatch | /W4 C4365 | -Wsign-conversion | -Wsign-conversion | implicit conversion changes signedness: 'TYPE' to 'TYPE' | ☑️ |
| The result of the unary 'operator' operator may be unaligned | /W4 C4366 | ||||
| Conversion from 'type1' to 'type2' may cause datatype misalignment exception | /W3 C4367 | ||||
| cannot define 'member' as a member of managed 'type': mixed types are not supported | C4368 clr | - | - | ||
| 'enumerator' : enumerator value 'value' cannot be represented as 'type', value is 'new_value' | /W1 C4369 | error | error | enumerator value 128 is not representable in the underlying type 'char' | |
| 'classname': layout of class has changed from a previous version of the compiler due to better packing | C4370 | ||||
| 'classname': layout of class may have changed from a previous version of the compiler due to better packing of member 'member' | /W3 C4371 | ||||
| 'function': virtual function overrides 'base_function', previous versions of the compiler did not override when parameters only differed by const/volatile qualifiers | /W3 C4373 | - | - | ||
| 'function1': interface method will not be implemented by non-virtual method 'function2' | /W1 C4374 | - | - | ||
| non-public method 'method2' does not override 'method1' | /W1 C4375 | ||||
| access specifier 'old_specifier:' is no longer supported: please use 'new_specifier:' instead | - | - | |||
| native types are private by default; -d1PrivateNativeTypes is deprecated | /W1 C4377 | ||||
| Must obtain function pointers to run initializers; consider System::ModuleHandle::ResolveMethodHandle | /W1 C4378 clr | - | - | ||
| Version version of the common language runtime is not supported by this compiler. Using this version may cause unexpected results. | /W1 C4379 | ||||
| 'class': A default constructor cannot be deprecated | /W1 C4380, error | ||||
| 'function1': interface method will not be implemented by non-public method 'function2' | /W1 C4381 | ||||
| throwing 'type' : a type with __clrcall destructor or copy constructor can only be caught in /clr:pure module | /W1 C4382 clr | ||||
| 'instance_dereference_operator' : the meaning of dereferencing a handle can change, when a user-defined 'operator' operator exists; write the operator as a static function to be explicit about the operand | /W1 C4383 clr | - | - | ||
| #pragma 'make_public' should only be used at global scope | /W1 C4384 | ||||
| alternative': was considered | /W3 C4387 | ||||
| 'expression': signed/unsigned mismatch | /W4 C4388 | -Wsign-compare | -Wsign-compare | comparison of integers of different signs: 'int' and 'unsigned int' | ☑️ |
| 'operator' : signed/unsigned mismatch | /W4 C4389 | -Wsign-compare | -Wsign-compare | comparison of integers of different signs: 'int' and 'unsigned int' | ☑️ |
| ';' : empty controlled statement found; is this the intent? | /W3 C4390 | -Wempty-body | -Wempty-body | if statement has empty body | ☑️ |
| 'signature' : incorrect return type for intrinsic function, expected 'type' | /W1 C4391 | - | - | ||
| 'signature' : incorrect number of arguments for intrinsic function, expected 'number' arguments | /W1 C4392 | - | - | ||
| 'var' : const has no effect on literal data member; ignored | /W1 C4393 | - | - | ||
| 'function' : per-appdomain symbol should not be marked with __declspec(dllexport) | C4394 | - | - | ||
| 'function' : member function will be invoked on a copy of the initonly data member 'member' | /W1 C4395 clr | - | - | ||
| "name" : the inline specifier cannot be used when a friend declaration refers to a specialization of a function template | /W2 C4396 | error | NOWARN | ||
| DefaultCharSetAttribute is ignored | /W1 C4397 clr | - | - | ||
| 'variable' : per-process global object might not work correctly with multiple appdomains; consider using __declspec(appdomain) | /W3 C4398 | - | - | ||
| 'symbol' : per-process symbol should not be marked with __declspec(dllimport) when compiled with /clr:pure | /W1 C4399 clr | - | - |
| Summary | Visual Studio | GCC | Clang | Clang message | is Same |
|---|---|---|---|---|---|
| 'type' : const/volatile qualifiers on this type are not supported | /W4 C4400 | ||||
| 'bitfield' : member is bit field | /W1 C4401 | ||||
| must use PTR operator | /W1 C4402 | ||||
| illegal PTR operator | /W1 C4403 | ||||
| period on directive ignored | /W3 C4404 | ||||
| 'identifier' : identifier is reserved word | /W1 C4405 | ||||
| operand on directive ignored | /W1 C4406 | NOWARN | NOWARN | ||
| cast between different pointer to member representations, compiler may generate incorrect code | /W1 C4407 | ||||
| anonymousstruct or union did not declare any data members | /W4 C4408 | warning | -Wmissing-declarations | declaration does not declare anything | ☑️ |
| ¥illegal instruction size | /W1 C4409 | ||||
| illegal size for operand | /W1 C4410 | ||||
| 'identifier' : symbol resolves to displacement register | /W1 C4411 | ||||
| 'function' : function signature contains type 'type'; C++ objects are unsafe to pass between pure code and mixed or native. | /W2 C4412 | - | - | ||
| 'classname::member': reference member is initialized to a temporary that doesn't persist after the constructor exits | C4413 | ||||
| 'function' : short jump to function converted to near | /W3 C4414 | - | - | ||
| duplicate __declspec(code_seg('name')) | /W1 C4416 | - | - | ||
| __declspec(code_seg(...)) contains empty string: ignored | /W1 C4416 | - | - | ||
| an explicit template instantiation cannot have __declspec(code_seg(...)): ignored | /W1 C4417 | - | - | ||
| __declspec(code_seg(...)) ignored on an enum | /W1 C4418 | - | - | ||
| 'symbol' has no effect when applied to private ref class 'class'. | /W3 C4419 | - | - | ||
| 'parameter': a reference parameter on a resumable function is potentially unsafe | /W3 C4421 | ||||
| std::bad_alloc': will be caught by class ('type') on line number | /W3 C4423 | ||||
| A SAL annotation cannot be applied to '...' | /W1 C4425 | - | - | ||
| 'operator': overflow in constant division, undefined behavior | /W1 C4427 | wip | wip | ||
| optimization flags changed after including header, may be due to #pragma optimize() | /W1 C4426 | - | - | ||
| catch for 'type1' preceded by 'type2' on line number; unpredictable behavior may result if 'std::bad_alloc' is thrown | /W3 C4424 | ||||
| 'operator' : operator not available, using 'operator' instead; run-time checking may be compromised | /W1 C4420 | ||||
| possible incomplete or improperly formed universal-character-name | /W4 C4429 | error | -Wunicode | \u used with no following hex digits; treating as '' followed by identifier | ☑️ |
| missing type specifier - int assumed. Note: C++ does not support default-int | error C4430 | error | error | ||
| missing type specifier - int assumed. Note: C no longer supports default-int | /W4 C4431 C-Only | - | - | ||
| a class constructor must have private accessibility; changing to private access | /W4 C4334 clr | - | - | ||
| 'class1' : Object layout under /vd2 will change due to virtual base 'class2' | /W4 C4435 | - | - | ||
| dynamic_cast from virtual base 'class1' to 'class2' in constructor or destructor could fail with partially-constructed object Compile with /vd2 or define 'class2' with #pragma vtordisp(2) in effect | /W1 C4436 | - | - | ||
| dynamic_cast from virtual base 'class1' to 'class2' could fail in some contexts Compile with /vd2 or define 'class2' with #pragma vtordisp(2) in effect | /W4 C4437 | - | - | ||
| 'function': cannot be called safely in /await:clrcompat mode. If 'function' calls into the CLR it may result in CLR head corruption | C4438 | - | - | ||
| 'function' : function definition with a managed type in the signature must have a __clrcall calling convention | C4439 clr | - | - | ||
| calling convention redefinition from 'calling_convention1' to 'calling_convention2' ignored | /W1 C4440 clr | - | - | ||
| calling convention of 'cc1' ignored; 'cc2' used instead | /W1 C4441 clr | - | - | ||
| embedded null terminator in __annotation argument. Value will be truncated. | /W1 C4442 | ||||
| expected pragma parameter to be '0', '1', or '2' | /W1 C4443 | ||||
| identifier': top level '__unaligned' is not implemented in this context | /W3 C4444 | ||||
| 'function' : in a WinRT or managed type a virtual method cannot be private | /W1 C4445 | ||||
| 'type': cannot map member 'name1' into this type, due to conflict with the type name. The method was renamed to 'name2' | /W1 C4446 | ||||
| 'main' signature found without threading model. Consider using 'int main(Platform::ArrayPlatform::String^^ args)'. | /W1 C4447 | - | - | ||
| 'type1' does not have a default interface specified in metadata. Picking: 'type2', which may fail at runtime. | C4448 | ||||
| 'type' an unsealed type should be marked as '[WebHostHidden]' | C4449 | - | - | ||
| 'type1' should be marked as '[WebHostHidden]' because it derives from 'type2' | C4450 | - | - | ||
| 'classname1::member': Usage of ref class 'classname2::member' inside this context can lead to invalid marshaling of object across contexts | /W4 C4451 | ||||
| 'identifier': public type cannot be at global scope. It must be in a namespace that is a child of the name of the output .winmd file. | /W1 C4452 | - | - | ||
| 'type': A '[WebHostHidden]' type should not be used on the published surface of a public type that is not '[WebHostHidden]' | /W1 C4453 | - | - | ||
| 'function' is overloaded by more than the number of input parameters without having [DefaultOverload] specified. Picking 'declaration' as the default overload | /W1 C4454 | - | - | ||
| 'operator operator': literal suffix identifiers that do not start with an underscore are reserved | /W1 C4455 | wip | wip | ||
| declaration of 'identifier' hides previous local declaration | /W4 C4456 | -Wshadow | -Wshadow | declaration shadows a local variable | ☑️ |
| declaration of 'identifier' hides function parameter | /W4 C4457 | -Wshadow | -Wshadow | declaration shadows a local variable | ☑️ |
| declaration of 'identifier' hides class member | /W4 C4458 | -Wshadow | -Wshadow | declaration shadows a local variable | ☑️ |
| declaration of 'identifier' hides global declaration | /W4 C4459 | -Wshadow | -Wshadow | declaration shadows a local variable | ☑️ |
| WinRT or CLR operator 'operator', has parameter passed by reference. WinRT or CLR operator 'operator' has different semantics from C++ operator 'operator', did you intend to pass by value? | /W4 C4460 clr | - | - | ||
| 'type' : this class has a finalizer 'finalizer' but no destructor 'dtor' | /W1 C4461 clr | - | - | ||
| cannot determine the GUID of the type. Program may fail at runtime. | /W1 C4462 | - | - | ||
| overflow; assigning value to bit-field that can only hold values from low_value to high_value | /W4 C4463 | NOWARN | -Wbitfield-constant-conversion | implicit truncation from 'int' to bit-field changes value from VALUE to VALUE | ☑️ |
| relative include path contains '..' | /W4 C4464 | NOWARN | NOWARN | ||
| floating-point control pragmas ignored under /clr | /W1 C4470 clr | - | - | ||
| 'enumeration': a forward declaration of an unscoped enumeration must have an underlying type (int assumed) | /W4 C4471 | error | error | ||
| 'identifier' is a native enum: add an access specifier (private/public) to declare a 'WinRT|managed' enum | /W1 C4472 | - | - | ||
| 'function' : not enough arguments passed for format string placeholders and their parameters expect number variadic arguments, but number were provided the missing variadic argument index is required by format string 'format_string' this argument is used by a conversion specifier this argument is used as a field width | /W1 C4473 | -Wformat | -Wformat | more '%' conversions than data arguments | ☑️ |
| 'function' : too many arguments passed for format string | /W3 C4474 | -Wformat-extra-args | -Wformat-extra-args | fdata argument not used by format string | ☑️ |
| 'function' : length modifier 'modifier' cannot be used with type field character 'character' in format specifier | /W3 C4475 | -Wformat | -Wformat | length modifier 'h' results in undefined behavior or no effect with 'f' conversion specifier | ☑️ |
| 'function' : unknown type field character 'character' in format specifier | /W3 C4476 | -Wformat | -Wformat | format specifies type 'TYPE' but the argument has type 'TYPE' | ☑️ |
| 'function' : format string 'string' requires an argument of type 'type', but variadic argument number has type 'type' | /W1 C4477 | -Wformat | -Wformat | format specifies type 'TYPE' but the argument has type 'TYPE' | ☑️ |
| 'function' : positional and non-positional placeholders cannot be mixed in the same format string | /W1 C4478 | - | - | ||
| nonstandard extension used: specifying underlying type for enum 'enumeration' | error C4480 | ||||
| nonstandard extension used: override specifier 'keyword' | /W4 C4481 | - | - | ||
| nonstandard extension used: enum 'enumeration' used in qualified name | C4482 | ||||
| syntax error: expected C++ keyword | /W1 C4483, error | ||||
| 'override_function' : matches base ref class method 'base_class_function', but is not marked 'virtual', 'new' or 'override'; 'new' (and not 'virtual') is assumed | C4484 | - | - | ||
| 'override_function' : matches base ref class method 'base_class_function ', but is not marked 'new' or 'override'; 'new' (and 'virtual') is assumed | C4485 clr | - | - | ||
| 'function' : a private virtual method of a ref class or value class should be marked 'sealed' | /W1 C4486 | - | - | ||
| 'derived_class_function' : matches inherited non-virtual method 'base_class_function' but is not explicitly marked 'new' | /W4 C4487 clr | - | - | ||
| 'function' : requires 'keyword' keyword to implement the interface method 'interface_method' | /W1 C4488 clr | - | - | ||
| 'specifier' : not allowed on interface method 'method'; override specifiers are only allowed on ref class and value class methods | /W1 C4489 clr | - | - | ||
| 'override' : incorrect use of override specifier; 'function' does not match a base ref class method | /W1 C4490 clr | - | - | ||
| 'name': has an illegal IDL version format | /W1 C4491 | - | - | ||
| 'function1': matches base ref class method 'function2', but is not marked 'override' | /W1 C4492, error | - | - | ||
| delete expression has no effect as the destructor of 'type' does not have 'public' accessibility | /W1 C4493, error | - | - | ||
| 'function' : Ignoring __declspec(allocator) because the function return type is not a pointer or reference | /W1 C4494 | - | - | ||
| nonstandard extension '__super' used: replace with explicit base class name | C4495 | - | - | ||
| nonstandard extension 'for each' used: replace with ranged-for statement | C4496 | - | - | ||
| nonstandard extension 'sealed' used: replace with 'final' | C4497 | - | - | ||
| nonstandard extension used: 'extension' | C4498 | - | - | ||
| 'function' : an explicit specialization cannot have a storage class (ignored)" | /W4 C4499 | wip | wip | ||
| 'linkage specification' requires use of keyword 'extern' and must precede all other specifiers | /W1 C4502 | ||||
| 'identifier' : decorated name length exceeded, name was truncated | /W1 C4503 | NOWARN | NOWARN | ||
| 'function' : unreferenced local function has been removed | /W4 C4505 | ||||
| no definition for inline function 'function' | /W1 C4506 | ||||
| 'function' : function should return a value; 'void' return type assumed | /W1 C4508 | error -fpermissive | error | ||
| nonstandard extension used: 'function' uses SEH and 'object' has destructor | C4509 | ||||
| 'class' : default constructor could not be generated | /W4 C4510 | ||||
| 'class' : copy constructor could not be generated | /W3 C4511 | ||||
| 'class' : assignment operator could not be generated | /W4 C4512 | ||||
| 'class' : destructor could not be generated | /W4 C4513 | ||||
| 'function' : unreferenced inline function has been removed | /W4 C4514 | NOWARN | NOWARN | ||
| 'namespace' : namespace uses itself | /W4 C4515 | NOWARN | NOWARN | ||
| 'class::symbol' : access-declarations are deprecated; member using-declarations provide a better alternative | /W4 C4516 | -Wdeprecated | -Wdeprecated or C++11 error | access declarations are deprecated; use using declarations instead | |
| access-declarations are deprecated; member using-declarations provide a better alternative | /W4 C4517 | ||||
| 'specifier' : storage-class or type specifier(s) unexpected here; ignored | /W1 C4518 | - | - | ||
| default template arguments are only allowed on a class template | error C4519 | ||||
| 'class' : multiple copy constructors specified | /W3 C4521 | ||||
| 'class' : multiple assignment operators specified | /W3 C4522 | ||||
| 'class' : multiple destructors specified | /W3 C4523 | ||||
| 'function' : static member function cannot override virtual function 'virtual function'override ignored, virtual function will be hidden | /W1 C4526 | - | - | ||
| C++ exception handler used, but unwind semantics are not enabled. Specify /EHsc | /W1 C4530 | NOWARN | NOWARN | ||
| C++ exception handling not available on Windows CE. Use Structured Exception Handling | /W1 C4531 | ||||
| 'continue' : jump out of __finally/finally block has undefined behavior during termination handling | /W1 C4532 | - | - | ||
| initialization of 'variable' is skipped by 'instruction' | /W1 C4533 | error | error | ||
| 'constructor' will not be a default constructor for class 'class' due to the default argument | /W3 C4534 clr | - | - | ||
| calling _set_se_translator() requires /EHa | /W3 C4535 | - | - | ||
| 'type name' : type-name exceeds meta-data limit of 'limit' characters | /W4 C4536 | ||||
| 'object' : 'operator' applied to non-UDT type | /W1 C4537 | - | - | ||
| 'type' : const/volatile qualifiers on this type are not supported | /W3 C4538 clr | - | - | ||
| dynamic_cast used to convert to inaccessible or ambiguous base; run-time test will fail ('type1' to 'type2') | /W1 C4540 | error | error | cannot cast 'NAME' to its private base class 'NAME' | |
| 'identifier' used on polymorphic type 'type' with /GR-; unpredictable behavior may result | /W1 C4541 | - | - | ||
| Skipping generation of merged injected text file, cannot write filetype file: 'issue': message | /W1 C4542 | ||||
| Injected text suppressed by attribute 'no_injected_text' | /W3 C4543 | ||||
| 'declaration': Default template argument ignored on this template declaration | /W1 C4544 | error | error | cannot add a default template argument to the definition of a member of a class template | |
| expression before comma evaluates to a function which is missing an argument list | /W1 C4545 | NOWARN | -Wcomma | possible misuse of comma operator here | ☑️ |
| function call before comma missing argument list | /W1 C4546 | -Waddress | -Wcomma | possible misuse of comma operator here | ☑️ |
| 'operator' : operator before comma has no effect; expected operator with side-effect | /W1 C4547 | -Wtautological-compare | -Wunused-comparison | inequality comparison result unused | ☑️ |
| expression before comma has no effect; expected expression with side-effect | /W1 C4548 | -Wunused-value | -Wunused-value | expression result unused | ☑️ |
| 'operator' : operator before comma has no effect; did you intend 'operator'? | /W1 C4549 | -Wunused-value | -Wunused-comparison | equality comparison result unused | ☑️ |
| expression evaluates to a function which is missing an argument list | /W1 C4550 | NOWARN | NOWARN | ||
| function call missing argument list | /W1 C4551 | -Waddress | -Wunused-value | expression result unused | ☑️ |
| 'operator' : operator has no effect; expected operator with side-effect | /W1 C4552 | -Wunused-value | -Wunused-value | expression result unused | ☑️ |
| 'operator' : operator has no effect; did you intend 'operator'? | /W1 C4553 | -Wunused-value | -Wunused-comparison | equality comparison result unused | ☑️ |
| 'operator' : check operator precedence for possible error; use parentheses to clarify precedence | /W3 C4554 | -Wparentheses | -Wshift-op-parentheses | operator '<<' has lower precedence than '+'; '+' will be evaluated first | ☑️ |
| expression has no effect; expected expression with side-effect | /W1 C4555 | -Wunused-value | -Wunused-value | expression result unused | ☑️ |
| value of intrinsic immediate argument 'value' is out of range 'lowerbound - upperbound' | /W1 C4556 | - | - | ||
| '__assume' contains effect 'effect' | /W3 C4557 | - | - | ||
| value of operand 'value' is out of range 'lowerbound - upperbound' | /W1 C4558 | - | - | ||
| 'function' : redefinition; the function gains __declspec(modifier) | /W4 C4559 | - | - | ||
| '__fastcall' incompatible with the '/clr' option: converting to '__stdcall' | /W1 C4561 | - | - | ||
| fully prototyped functions are required with the '/clr' option: converting '()' to '(void)' | /W4 C4562 clr | - | - | ||
| method 'method' of class 'class' defines unsupported default parameter 'parameter' | - | - | |||
| 'function' : redefinition; the symbol was previously declared with __declspec(modifier) | /W4 C4565 | - | - | ||
| character represented by universal-character-name 'char' cannot be represented in the current code page (page) | /W1 C4566 | -Wmultichar | error | character too large for enclosing character literal type | ☑️ |
| 'function': no members match the signature of the explicit override | /W1 C4568 | ||||
| 'function': no members match the signature of the explicit override | /W3 C4569 | ||||
| 'type' : is not explicitly declared as abstract but has abstract functions | /W3 C4570 clr | - | - | ||
| Informational: catch(...) semantics changed since Visual C++ 7.1; structured exceptions (SEH) are no longer caught | /W4 C4571 | - | - | ||
| [ParamArray] attribute is deprecated under /clr, use '...' instead | /W1 C4572 clr | - | - | ||
| the usage of 'lambda function' requires the compiler to capture 'this' but the current default capture mode does not allow it | /W1 C4573 | ||||
| 'Identifier' is defined to be '0': did you mean to use '#if identifier'? | /W4 C4574 | ||||
| '__vectorcall' incompatible with the '/clr' option: converting to '__stdcall' | /W1 C4575 | - | - | ||
| 'noexcept' used with no exception handling mode specified; termination on exception is not guaranteed. Specify /EHsc | /W1 C4577 | ||||
| [attribute] is deprecated; instead specify System::Attribute or Platform::Metadata as a base class | /W3 C4580 clr | - | - | ||
| deprecated behavior: '"string1"' replaced with 'string2' to process attribute | /W1 C4581 | - | - | ||
| 'class1' : base-class 'class2' is already a base-class of 'class3' | /W1 C4584 | -Winaccessible-base | -Winaccessible-base | direct base 'A' is inaccessible due to ambiguity | ☑️ |
| 'name': illegal qualified name in member declaration | /W4 C4596 | error | error | ||
| undefined behavior: offsetof applied to a member of a virtual base | error C4597 | ||||
| '#include "header"': header number number in the precompiled header does not match current compilation at that position | /W1,3 C4598 | ||||
| 'flag path': command line argument number number does not match precompiled header | /W3 C4599 |
| Summary | Visual Studio | GCC | Clang | Clang message | is Same |
|---|---|---|---|---|---|
| #pragma 'macro name' : expected a valid non-empty string | /W1 C4600 | NOWARN | NOWARN | ||
| #pragma pop_macro : 'macro name' no previous #pragma push_macro for this identifier | /W1 C4602 | NOWARN | -Wignored-pragmas | pragma pop_macro could not pop 'x', no matching push_macro | |
| 'identifier' : macro is not defined or definition is different after precompiled header use | /W1 C4603 | ||||
| #pragma warning : 'warning_number' ignored; Code Analysis warnings are not associated with warning levels | /W1 C4604 | -Wunknown-pragmas | -Wunknown-pragmas | unknown pragma ignored | |
| 'union_member' has already been initialized by another union member in the initializer list, 'union_member' | /W3 C4608 | error | error | initializing multiple members of union | |
| object 'class' can never be instantiated - user-defined constructor required | /W4 C4610 | error | error | extra qualification on member 'operator=' | |
| interaction between 'function' and C++ object destruction is non-portable | /W4 C4611 | ||||
| This warning occurs with #pragma include_alias when a filename is incorrect or missing | /W1 C4612 | -Wunknown-pragmas | -Wunknown-pragmas | ||
| 'segment' : class of segment cannot be changed | /W1 C4613 | ||||
| #pragma warning : unknown user warning type | /W1 C4615 | -Wunknown-pragmas | -Wunknown-pragmas | ||
| #pragma warning : warning number 'number' not a valid compiler warning | /W1 C4616 | -Wunknown-pragmas | -Wunknown-pragmas | ||
| pragma parameters included an empty string; pragma ignored | /W1 C4618 | -Wunknown-pragmas | -Wunknown-pragmas | ||
| #pragma warning : there is no warning number 'number' | /W3 C4619 | -Wunknown-pragmas | -Wunknown-pragmas | ||
| no postfix form of 'operator ++' found for type 'type', using prefix form | error | error | |||
| no postfix form of 'operator --' found for type 'type', using prefix form | error | error | |||
| Overwriting debug information formed during creation of the precompiled header in object file: 'file' | /W3 C4622 | - | - | ||
| 'derived class' : default constructor was implicitly defined as deleted because a base class default constructor is inaccessible or deleted | /W4 C4623 | NOWARN | NOWARN | ||
| 'derived class' : destructor was implicitly defined as deleted because a base class destructor is inaccessible or deleted | /W1 C4624 | NOWARN | NOWARN | ||
| 'derived class' : copy constructor was implicitly defined as deleted because a base class copy constructor is inaccessible or deleted | /W4 C4625 | NOWARN | NOWARN | ||
| 'derived class' : assignment operator was implicitly defined as deleted because a base class assignment operator is inaccessible or deleted | /W4 C4626 | NOWARN | NOWARN | ||
| 'header_file': skipped when loNOWARNing for precompiled header use | /W1 C4627 | - | - | ||
| digraphs not supported with -Ze. Character sequence 'digraph' not interpreted as alternate tNOWARNen for 'char' | /W1 C4628 | NOWARN | NOWARN | ||
| digraph used, character sequence 'digraph' interpreted as tNOWARNen 'char' (insert a space between the two characters if this is not what you intended) | /W4 C2629 | NOWARN | NOWARN | ||
| 'symbol' : 'extern' storage class specifier illegal on member definition | /W1 C4630 | NOWARN | NOWARN | ||
| MSXML or XPath unavailable, XML document comments will not be processed. reason | /W1 C4631 | ||||
| XML document comment: file - access denied: reason | /W1 C4632 | - | - | ||
| XML document comment target: error: reason | /W3 C4633 | - | - | ||
| XML document comment: cannot be applied: reason | /W4 C4634 | - | - | ||
| XML document comment target: badly-formed XML: reason | /W3 C4635 | - | - | ||
| XML document comment applied to 'construct': tag requires non-empty '' attribute. | /W3 C4636 | - | - | ||
| XML document comment target: tag discarded. reason | /W3 C4637 | - | - | ||
| XML document comment target: reference to unknown symbol 'symbol' | /W3 C4638 | - | - | ||
| MSXML error, XML document comments will not be processed. reason | /W4 C4639 | - | - | ||
| 'instance' : construction of local static object is not thread-safe | /W3 C4640 | ||||
| XML document comment has an ambiguous cross reference | /W3 C4641 | - | - | ||
| function declared with __declspec(noreturn) has a return statement | /W3 C4645 | - | - | ||
| function declared with __declspec(noreturn) has non-void return type | /W3 C4647 | - | - | ||
| debugging information not in precompiled header; only global symbols from the header will be available | /W1 C4650 | ||||
| 'definition' specified for precompiled header but not for current compile | /W1 C4651 | ||||
| compiler option 'option' inconsistent with precompiled header; current command-line option will override that defined in the precompiled header | /W1 C4652 | - | - | ||
| compiler option 'option' inconsistent with precompiled header; current command-line option ignored | /W2 C4653 | - | - | ||
| 'symbol' : variable type is new since the last build, or is defined differently elsewhere | /W1 C4655 | - | - | ||
| 'symbol' : data type is new or has changed since the last build, or is defined differently elsewhere | /W1 C4656 | - | - | ||
| expression involves a data type that is new since the last build | /W1 C4657 | - | - | ||
| #pragma 'pragma' : use of reserved segment 'segment' has undefined behavior, use #pragma comment(linker, ...) | /W1 C4659 | -Wunknown-pragmas | -Wunknown-pragmas | ||
| 'identifier' : no suitable definition provided for explicit template instantiation request | /W1 C4661 | error | error | declaration does not declare anything | |
| explicit instantiation; template-class 'identifier1' has no definition from which to specialize 'identifier2' | /W1 C4662 | error | error | declaration does not declare anything | |
| 'function' : no function template defined that matches forced instantiation | /W1 C4667 | error | error | explicit instantiation of 'max' does not refer to a function template, variable template, member function, member class, or static data member | |
| 'symbol' is not defined as a preprocessor macro, replacing with '0' for 'directives' | /W4 C4668 | -Wundef | -Wundef | 'SYMBOL' is not defined, evaluates to 0 | ☑️ |
| 'cast' : unsafe conversion: 'class' is a managed or WinRT type object | /W1 C4669 | - | - | ||
| 'identifier' : this base class is inaccessible | /W4 C4670 | NOWARN | NOWARN | ||
| 'identifier1' : ambiguous. First seen as 'identifier2' | /W4 C4672 | ||||
| throwing 'identifier' the following types will not be considered at the catch site | /W4 C4673 | NOWARN | NOWARN | ||
| 'method' should be declared 'static' and have exactly one parameter | [/W C4674][] | - | - | ||
| 'function': signature of non-private member contains assembly private type 'private_type' | /W1 C4677 | - | - | ||
| base class 'base_type' is less accessible than 'derived_type' | /W1 C4678 | - | - | ||
| 'member' : could not import member | /W1 C4679 | ||||
| 'class' : coclass does not specify a default interface | /W4 C4680 | - | - | ||
| 'class' : coclass does not specify a default interface that is an event source | /W4 C4681 | - | - | ||
| 'parameter' : no directional parameter attribute specified, defaulting to [in] | /W4 C4682 | - | - | ||
| 'function': event source has an 'out'-parameter; exercise caution when hoNOWARNing multiple event handlers | /W1 C4683 | - | - | ||
| 'attribute' : WARNING!! attribute may cause invalid code generation: use with caution | /W1 C4884 | - | - | ||
| expecting '> >' found '>>' when parsing template parameters | /W1 C4685 | ||||
| 'user-defined type' : possible change in behavior, change in UDT return calling convention | /W3 C4686 | ||||
| 'class': a sealed abstract class cannot implement an interface 'interface' | C4687 | - | - | ||
| 'constraint': constraint list contains assembly private type 'type' | /W1 C4688 | - | - | ||
| [ emitidl( pop ) ] : more pops than pushes | /W4 C4690 | - | - | ||
| 'type' : type referenced was expected in unreferenced assembly 'file', type defined in current translation unit used instead | /W1 C4691 | - | - | ||
| 'function': signature of non-private member contains assembly private native type 'native_type' | /W1 C4692 | - | - | ||
| 'class': a sealed abstract class cannot have any instance members 'Test' | C4693 | - | - | ||
| 'class': a sealed abstract class cannot have a base-class 'base_class' | C4694 | - | - | ||
| uninitialized local variable 'name' used | /W1,4 C4700 | -Wuninitialized | -Wuninitialized | variable 'NAME' is uninitialized when used here | ☑️ |
| Potentially uninitialized local variable 'name' used | /W4 C4701 | NOWARN | -Wsometimes-uninitialized | variable 'NAME' is used uninitialized whenever 'if' condition is false | ☑️ |
| unreachable code | /W4 C4702 | -Wunreachable-code ? | -Wunreachable-code | code will never be executed | ☑️ |
| Potentially uninitialized local pointer variable 'name' used | /W4 C4703 | NOWARN | -Wsometimes-uninitialized | variable 'NAME' is used uninitialized whenever 'if' condition is false | ☑️ |
| assignment within conditional expression | /W4 C4706 | -Wparentheses | -Wparentheses | using the result of an assignment as a condition without parentheses | ☑️ |
| comma operator within array index expression | /W4 C4709 | -Wcomma-subscript | -Wdeprecated-comma-subscript | top-level comma expression in array subscript is deprecated | ☑️ |
| 'function' : function not inlined | /W4 C4710 | ||||
| function 'function' selected for inline expansion | /W1 C4711 | ||||
| function 'function' marked as __forceinline not inlined | /W4 C4714 | - | - | ||
| 'function' : not all control paths return a value | /W1 C4715 | -Wreturn-type | -Wreturn-type | non-void function does not return a value in all control paths | ☑️ |
| 'function' must return a value | /W1 C4716 | -Wreturn-type | -Wreturn-type | non-void function does not return a value in all control paths | ☑️ |
| 'function' : recursive on all control paths, function will cause runtime stack overflow | /W1 C4717 | NOWARN | -Winfinite-recursion | all paths through this function will call itself | ☑️ |
| 'function call' : recursive call has no side effects, deleting | /W4 C4718 | ||||
| 'function' : destructor never returns, potential memory leak | /W1 C4722 | NOWARN | NOWARN | ||
| potential divide by 0 | /W3 C4723 | -Wdiv-by-zero | -Wdivision-by-zero | division by zero is undefined | ☑️ |
| potential mod by 0 | /W3 C4724 | -Wdiv-by-zero | -Wdivision-by-zero | division by zero is undefined | ☑️ |
| instruction may be inaccurate on some Pentiums | /W4 C4725 | - | - | ||
| "PCH named pch_file with same timestamp found in obj_file_1 and obj_file_2. Using first PCH. | /W1 C4727 | - | - | ||
| function too big for flow graph based warnings | /W1 C4729 | - | - | ||
| 'main' : mixing _m64 and floating point expressions may result in incorrect code | /W1 C4730 | - | - | ||
| 'pointer' : frame pointer register 'register' modified by inline assembly code | /W1 C4731 | - | - | ||
| Inline asm assigning to 'FS:0' : handler not registered as safe handler | /W1 C4733 | - | - | ||
| storing 32-bit float result in memory, possible loss of performance | /W3 C4738 | ||||
| reference to variable 'var' exceeds its storage space | /W1 C4739 | NOWARN | -Wcast-align | ||
| flow in or out of inline asm code suppresses global optimization | /W4 C4740 | - | - | ||
| 'variable' has different alignment in 'file1' and 'file2': number1 and number2 | /W1 C4742 | NOWARN | NOWARN | ||
| 'type' has different size in 'file1' and 'file2': number and number bytes | /W1 C4743 | ||||
| 'var' has different type in 'file1' and 'file2': 'type1' and 'type2' | /W1 C4744 | NOWARN | NOWARN | ||
| volatile access of '' is subject to /volatile:[iso|ms] setting; consider using __iso_volatile_load/store intrinsic functions. | C4746 | ||||
| Calling managed 'entrypoint': Managed code may not be run under loader lock, including the DLL entrypoint and calls reached from the DLL entrypoint | /W1 C4747 | - | - | ||
| 'identifier': function with _alloca() inlined into a loop | /W1 C4750 | - | - | ||
| Conversion rules for arithmetic operations in a comparison mean that one branch cannot be executed. | /W4 C4754 | NOWARN | NOWARN | ||
| overflow in constant arithmetic | /W2 C4756 | ||||
| Cannot align catch objects to greater than 16 bytes | /W1 C4764 | NOWARN | -Wunderaligned-exception-object | underaligned exception object thrown | |
| #import referenced a type from a missing type library; 'missing-type' used as a placeholder | /W1 C4772 | - | - | ||
| 'identifier' : identifier was truncated to 'number' characters | /W1 C4788 | - | - | ||
| buffer 'identifier' of size N bytes will be overrun; M bytes will be written starting at offset L | /W1 C4789 | NOWARN | -Wfortify-source | 'NAME' will always overflow; destination buffer has size SIZE, but size argument is SIZE | ☑️ |
| function 'function' declared using sysimport and referenced from native code; import library required to link | /W3 C4792 | - | - | ||
| 'function' : function is compiled as native code: 'reason' | /W1,3 C4793 | - | - | ||
| segment of thread local storage variable 'variable' changed from 'section name' to '.tls$' | /W1 C4794 | - | - | ||
| No EMMS at end of function 'function' | /W1 C4799 | - | - |
| Summary | Visual Studio | GCC | Clang | Clang message | is Same |
|---|---|---|---|---|---|
| Implicit conversion from 'type' to bool. Possible information loss | /W4 C4800 | -Wdeprecated | -Wdeprecated-increment-bool | incrementing expression of type bool is deprecated and incompatible with C++17 | ☑️ |
| 'method' : the raise method has a different storage class from that of the event, 'event' | /W1 C4803 | - | - | ||
| 'operation' : unsafe use of type 'bool' in operation | /W1 C4804 | NOWARN | NOWARN | ||
| 'operation' : unsafe mix of type 'type' and type 'type' in operation | /W1 C4805 | NOWARN | NOWARN | ||
| 'operation' : unsafe operation: no value of type 'type' promoted to type 'type' can equal the given constant | /W1 C4806 | -Wbool-compare | -Wtautological-constant-out-of-range-compare | result of comparison of constant 3 with expression of type 'bool' is always false | ☑️ |
| 'operation' : unsafe mix of type 'type' and signed bitfield of type 'type' | /W1 C4807 | NOWARN | NOWARN | ||
| case 'value' is not a valid value for switch condition of type 'bool' | /W1 C4808 | -Wswitch-outside-range | (-Wswitch-bool) | ☑️ | |
| switch statement has redundant 'default' label; all possible 'case' labels are given | /W1 C4809 | ||||
| value of pragma pack(show) == n | /W1 C4810 | - | - | ||
| value of pragma conform(forScope, show) == value | /W1 C4811 | - | - | ||
| obsolete declaration style: please use 'new_syntax' instead | /W1 C4812 | error | error | ||
| 'function' : a friend function of a local class must have been previously declared | /W1 C4813 | error | error | no matching function found in local scope | |
| 'param' : parameter has a zero-sized array which will be truncated (unless the object is passed by reference) | /W4 C4816 | NOWARN | NOWARN | ||
| 'member' : illegal use of '.' to access this member; compiler replaced with '->' | /W1 C4817 | - | - | ||
| The file contains a character that cannot be represented in the current code page (number). Save the file in Unicode format to prevent data loss. | /W1 C4819 | ||||
| 'bytes' bytes padding added after construct 'member_name' | /W4 C4820 | - | - | ||
| Unable to determine Unicode encoding type, please save the file with signature (BOM) | /W1 C4821 | ||||
| 'member' : local class member function does not have a body | /W1 C4822 | NOWARN | NOWARN | ||
| 'function' : uses pinning pointers but unwind semantics are not enabled. Consider using /EHa | /W3 C4823 | - | - | ||
| Conversion from 'type1' to 'type2' is sign-extended. This may cause unexpected runtime behavior. | /W2 C4826 | ||||
| A public 'ToString' method with 0 parameters should be marked as virtual and override | /W3 C4827 | - | - | ||
| Possibly incorrect parameters to function main. Consider 'intmain(Platform::ArrayPlatform::String^^ argv)' | /W1 C4829 | - | - | ||
| 'variable' : the initializer for exported data will not be run until managed code is first executed in the host assembly | /W1 C4835 | - | - | ||
| trigraph detected: '??character' replaced by 'character' | /W4 C4837 | ||||
| conversion from 'type_1' to 'type_2' requires a narrowing conversion | /W1 C4838 | -Wnarrowing | -Wc++11-narrowing | type 'double' cannot be narrowed to 'int' in initializer list | ☑️ |
| non-standard use of class 'type' as an argument to a variadic function | /W3 C4839 | error | error | ||
| non-portable use of class 'type' as an argument to a variadic function | /W4 C4840 | NOWARN | error (-Wnon-pod-varargs) | cannot pass non-trivial object of type 'TYPE' to variadic function; expected type from format string was 'TYPE' | |
| non-standard extension used: compound member designator used in offsetof | /W4 C4841 | ||||
| the result of 'offsetof' applied to a type using multiple inheritance is not guaranteed to be consistent between compiler releases | /W4 C4842 | ||||
| 'type1': An exception handler of reference to array or function type is unreachable, use 'type2' instead | C4843 | ||||
| 'export module module_name;' is now the preferred syntax for declaring a module interface | C4844 | ||||
| '__declspec(no_init_all)' is ignored if '/d1initall[0|1|2|3]' was not specified on the command line | /W4 C4845 | - | - | ||
| 'value' is not a valid argument for '/d1initall': command-line flag ignored | /W4 C4846 | - | - | ||
| '__declspec(no_init_all)' can only be applied to a function, a class type, or a local variable: ignored | /W4 C4847 | - | - | ||
| support for standard attribute 'no_unique_address' in C++17 and earlier is a vendor extension | /W1 C4848 | ||||
| binding dereferenced null pointer to reference has undefined behavior | C4854 | ||||
| implicit capture of 'this' via '[=]' is deprecated in 'version' | C4855 | ||||
| 'value' is not a valid argument for '/d1initAll:FillPattern' (value must be between 0 and 255). Command-line flag ignored | C4856 | - | - | ||
| C++/CLI mode does not support C++ versions newer than C++17; setting language to /std:c++17 | C4857 | - | - | ||
| 'file(line_number)' compiler may not enforce left-to-right evaluation order for call to operator_name | /W4 C4866 | ||||
| 'function': function call missing argument list; use 'call' to create a pointer to member | C4867 | error | error | ||
| 'file(line_number)' compiler may not enforce left-to-right evaluation order in braced initializer list | C4868 | NOWARN | NOWARN | ||
| floating point division by zero detected when compiling the call graph for the concurrency::parallel_for_each at: 'location' | /W2 C4872 | ||||
| casting from 'const type_1' to 'type_2': casting away constness from a pointer or reference may result in undefined behavior in an amp restricted function | /W1 C4880 | ||||
| the constructor and/or the destructor will not be invoked for tile_static variable 'variable-name' | /W4 C4881 | ||||
| passing functors with non-const call operators to concurrency::parallel_for_each is deprecated | /W1 C4882 | ||||
| intermediate language mismatch between 'tool1' version 'version1' and 'tool2' version 'version2' | /W1 C4900 | ||||
| wide string literal cast to 'LPSTR' | /W1 C4905 | - | - | ||
| string literal cast to 'LPWSTR' | /W1 C4906 | - | - | ||
| '' : '__declspec(dllexport)' and 'extern' are incompatible on an explicit instantiation | /W1 C4910 | - | - | ||
| 'attribute': attribute has undefined behavior on a nested UDT | /W1 C4912 | - | - | ||
| user defined binary operator ',' exists but no overload could convert all operands, default built-in binary operator ',' used | /W4 C4913 | NOWARN | -Wcomma | possible misuse of comma operator here | ☑️ |
| in order to have a dispid, 'description': must be introduced by an interface | /W1 C4916 | ||||
| 'declarator' : a GUID can only be associated with a class, interface or namespace | /W1 C4917 | - | - | ||
| 'character' : invalid character in pragma optimization list | /W4 C4918 | - | - | ||
| enum enum member member=value already seen in enum enum as member=value | /W1 C4920 | - | - | ||
| 'description': attribute value 'attribute' should not be multiply specified | /W3 C4921 | ||||
| 'method': dispinterface method cannot be called from script | /W1 C4925 | - | - | ||
| 'identifier': symbol is already defined: attributes ignored | /W1 C4926 | - | - | ||
| illegal conversion; more than one user-defined conversion has been implicitly applied | /W1 C4927 | error | error | ||
| illegal copy-initialization; more than one user-defined conversion has been implicitly applied | /W1 C4928 | error | error | ||
| 'file': typelibrary contains a union; ignoring the 'embedded_idl' qualifier | /W1 C4929 | - | - | ||
| 'prototype': prototyped function not called (was a variable definition intended?) | /W1 C4930 | NOWARN | -Wvexing-parse | empty parentheses interpreted as a function declaration | ☑️ |
| we are assuming the type library was built for number-bit pointers | /W4 C4931 | - | - | ||
| __identifier(identifier_1) and __identifier(identifier_2) are indistinguishable | /W4 C4932 | - | - | ||
| '__delegate(multicast)' is deprecated, use '__delegate' instead | /W1 C4934 | - | - | ||
| assembly access specifier modified from 'access' | /W1 C4935 | - | - | ||
| this __declspec is supported only when compiled with /clr or /clr:pure | C4936 | - | - | ||
| 'text1' and 'text2' are indistinguishable as arguments to 'directive' | /W4 C4937 | - | - | ||
| 'var' : Floating point reduction variable may cause inconsistent results under /fp:strict or #pragma fenv_access | /W4 C4938 | - | - | ||
| #pragma vtordisp is deprecated and will be removed in a future release of Visual C++ | /W1 C4939 | - | - | ||
| 'symbol' : cannot import symbol from 'assembly1': as 'symbol' already exists in the current scope | /W1 C4944 clr | - | - | ||
| 'symbol' : cannot import symbol from 'assembly2': as 'symbol' has already been imported from another assembly 'assembly1' | /W1 C4945 | - | - | ||
| reinterpret_cast used between related classes: 'class1' and 'class2' | /W1 C4946 | NOWARN | -Wreinterpret-base-class | 'reinterpret_cast' from class 'c *' to its virtual base 'a *' behaves differently from 'static_cast' | ☑️ |
| 'type_or_member' : marked as obsolete | /W1 C4947 | - | - | ||
| return type of 'accessor' does not match the last parameter type of the corresponding setter | /W2 C4948 | - | - | ||
| pragmas 'managed' and 'unmanaged' are meaningful only when compiled with '/clr[:option]' | /W1,4 C4949 | - | - | ||
| 'type_or_member' : marked as obsolete | C4950 | - | - | ||
| 'function' has been edited since profile data was collected, function profile data not used | /W1 C4951 | - | - | ||
| 'function' : no profile data found in program database 'pgd_file' | /W1 C4952 | - | - | ||
| Inlinee 'function' has been edited since profile data was collected, profile data not used | /W1 C4953 | - | - | ||
| 'function': not profiled (contains __int64 switch expression) | C4954 | - | - | ||
| 'import2': import ignored; already imported from 'import1' | C4955 | - | - | ||
| 'type' : this type is not verifiable | C4956 clr | - | - | ||
| 'cast' : explicit cast from 'cast_from' to 'cast_to' is not verifiable | C4957 clr | - | - | ||
| 'operation' : pointer arithmetic is not verifiable | C4958 clr | - | - | ||
| cannot define unmanaged struct 'type' in /clr:safe because accessing its members yields unverifiable code | C4959 clr | - | - | ||
| 'function' is too big to be profiled | /W4 C4960 | - | - | ||
| No profile data was merged into '.pgd file', profile-guided optimizations disabled | C4961 | - | - | ||
| 'function' : Profile-guided optimizations disabled because optimizations caused profile data to become inconsistent" | C4962 | ||||
| 'description': no profile data found; different compiler options were used in instrumented build | /W1 C4963 | ||||
| No optimization options were specified; profile info will not be collected | /W1 C4964 | ||||
| implicit box of integer 0; use nullptr or explicit cast | /W1 C4965 clr | - | - | ||
| 'function' has __code_seg annotation with unsupported segment name, annotation ignored | /W1 C4966 | - | - | ||
| delegate constructor: target object ignored since 'type' is static | C4970 | ||||
| Argument order: , for delegate constructor is deprecated, use , | /W1 C4971 | ||||
| Directly modifying or treating the result of an unbox operation as an lvalue is unverifiable | C4972 | - | - | ||
| 'symbol': marked as deprecated | /W1 C4973 | -Wdeprecated | -Wdeprecated | ☑️ | |
| 'symbol': marked as deprecated | /W1 C4973 | -Wdeprecated | -Wdeprecated | ☑️ | |
| Warbird: function 'function' marked as __forceinline not inlined because it contains exception semantics | /W3 C4981 | ||||
| 'if constexpr' is a C++17 language extension | C4984 | warning | -Wc++17-extensions | constexpr if is a C++17 extension | ☑️ |
| 'symbol-name': attributes not present on previous declaration. | /W4 C4985 | - | - | ||
| 'function': exception specification does not match previous declaration | C4986 | error | error | ||
| nonstandard extension used: 'throw (...)' | /W4 C4987 | ||||
| 'variable': variable declared outside class/function scope | /W4 C4988 | ||||
| 'type': type has conflicting definitions. | /W4 C4989 | ||||
| Warbird: message | /W3 C4990 | ||||
| Warbird: function 'function' marked as __forceinline not inlined because protection level of inlinee is greater than the parent | /W3 C4991 | ||||
| Warbird: function 'function-name' marked as __forceinline not inlined because it contains inline assembly which cannot be protected | /W3 C4992 | ||||
| 'function': name was marked as #pragma deprecated | /W3 C4995 | - | - | ||
| Your code uses a function, class member, variable, or typedef that's marked deprecated. Symbols are deprecated by using a __declspec(deprecated) modifier, or the C++14 [[deprecated]] attribute. The actual C4996 warning message is specified by the deprecated modifier or attribute of the declaration. | /W3 C4996 | -Wdeprecated-declarations | -Wdeprecated-declarations | 'NAME' is deprecated | ☑️ |
| 'class': coclass does not implement a COM interface or pseudo-interface | /W3 C4997 | - | - | ||
| EXPECTATION FAILED: expectation(value) | /W1 C4998 | ||||
| UNKNOWN WARNING From the Help menu choose the Technical Support command or open the Technical Support help file for more information | /W1 C4999 | ||||
| 'type': multiple move constructors specified | C5022 | wip | wip | ||
| 'type': multiple move assignment operators specified | C5023 | wip | wip | ||
| 'type': move constructor was implicitly defined as deleted | /W4 C5024 | wip | wip | ||
| 'type': move assignment operator was implicitly defined as deleted | /W4 C5025 | wip | wip | ||
| 'type': move constructor was implicitly defined as deleted | /W1,4 C5026 | wip | wip | ||
| 'type': move assignment operator was implicitly defined as deleted | /W1,4 C5027 | wip | wip | ||
| 'name': Alignment specified in prior declaration (number) not specified in definition | /W1 C5028 | wip | wip | ||
| nonstandard extension used: alignment attributes in C++ apply to variables, data members and tag types only | /W4 C5029 | wip | wip | ||
| attribute 'attribute-name' is not recognized | /W3 C5030 | wip | wip | ||
| #pragma warning(pop): likely mismatch, popping warning state pushed in different file | /W4 C5031 | - | - | ||
| detected #pragma warning(push) with no corresponding #pragma warning(pop) | /W4 C5032 | - | - | ||
| 'storage-class' is no longer a supported storage class | /W1 C5033 | wip | wip | ||
| use of intrinsic 'intrinsic' causes function function-name to be compiled as guest codeC5034 | |||||
| use of feature 'feature' causes function function-name to be compiled as guest code | C5035 | ||||
| varargs function pointer conversion when compiling with /hybrid:x86arm64 'type1' to 'type2' | /W1 C5036 | - | - | ||
| 'member-function': an out-of-line definition of a member of a class template cannot have default arguments | error C5037 | ||||
| data member 'member1' will be initialized after data member 'member2' data member 'member' will be initialized after base class 'base_class' | C5038 | -Wreorder | -Wreorder-ctor | field 'y' will be initialized after field 'x' | ☑️ |
| 'function': pointer or reference to potentially throwing function passed to extern C function under -EHc. Undefined behavior may occur if this function throws an exception. | /W4 C5039 | ||||
| dynamic exception specifications are valid only in C++14 and earlier; treating as noexcept(false) | /W3 C5040 | wip | wip | ||
| 'definition': out-of-line definition for constexpr static data member is not needed and is deprecated in C++17 | /W1 C5041 | wip | wip | ||
| 'declaration': function declarations at block scope cannot be specified 'inline' in standard C++; remove 'inline' specifier | /W3 C5042 | wip | wip | ||
| 'specification': exception specification does not match previous declaration | /W2 C5043 | wip | wip | ||
| An argument to command-line option option-name points to a path 'path-name' that does not exist | /W4 C5044 | - | - | ||
| Compiler will insert Spectre mitigation for memory load if /Qspectre switch specified | C5045 | - | - | ||
| 'function' : Symbol involving type with internal linkage not defined | /W2 C5046 | ||||
| use of nonstandard __if_exists with modules is not supported | /W1 C5047 | - | - | ||
| Use of macro 'macroname' may result in non-deterministic output | /W1 C5048 | ||||
| 'string': Embedding a full path may result in machine-dependent output | /W1 C5049 | ||||
| Possible incompatible environment while importing module 'module_name': issue | /W1 C5050 | wip | wip | ||
| attribute 'attribute-name' requires at least 'standard-level'; ignored | C5051 | wip | wip | ||
| Keyword 'keyword-name' was introduced in C++ and requires use of the 'option-name' command-line option | C5052 | ||||
| support for 'explicit(<expr>)' in C++17 and earlier is a vendor extension | C5053 | wip | wip | ||
| operator 'operator-name': deprecated between enumerations of different types | C5054 | wip | wip | ||
| operator 'operator-name': deprecated between enumerations and floating-point types | C5055 | wip | wip | ||
| operator 'operator-name': deprecated for array types | C5056 | wip | wip | ||
| header unit reference to 'name' already exists. Ignoring header unit 'header-name' | C5057 | wip | wip | ||
| file system error: cannot find header file 'file-name' for header unit 'unit-name' | C5058 | wip | wip | ||
| runtime checks and address sanitizer is not currently supported - disabling runtime checks | C5059 | - | - | ||
| /Qpar and address sanitizer not currently supported - disabling auto-parallelization | C5060 | - | - | ||
| the use of a comma operator as a subscript expression has been deprecated | C5061 | wip | wip | ||
| enum direct list initialization between 'type-1' and 'type-2' is no longer supported | C5062 | wip | wip | ||
| 'std::is_constant_evaluated' always evaluates to true in manifestly constant-evaluated expressions | C5063 | wip | wip | ||
| VA_ARGS is reserved for use in variadic macros | /W1 C5100 | wip | wip | ||
| use of preprocessor directive in function-like macro argument list is undefined behavior | /W1 C5101 | wip | wip | ||
| ignoring invalid command-line macro definition 'value' | /W1 C5102 | ||||
| pasting 'token1' and 'token2' does not result in a valid preprocessing token | /W1 C5103 | wip | wip | ||
| found 'string1#string2' in macro replacement list, did you mean 'string1""#string2'? | /W1 C5104 | wip | wip | ||
| macro expansion producing 'defined' has undefined behavior | /W1 C5105 | -Wexpansion-to-defined | -Wexpansion-to-defined | macro expansion producing 'defined' has undefined behavior | ☑️ |
| macro redefined with different parameter names | /W1 C5106 | wip | wip | ||
| missing terminating 'char' character | /W1 C5107 | wip | wip | ||
| VA_OPT is reserved for use in variadic macros | C5108 | wip | wip | ||
| feature 'feature-name' requires compiler flag 'option-name' | C5200 | ||||
| a module declaration can appear only at the start of a translation unit unless a global module fragment is used | C5201 | wip | wip | ||
| a global module fragment can only contain preprocessor directives | C5202 | wip | wip | ||
| a parenthesized declarator name after 'explicit' will be considered an explicit-specifier in C++20 | C5203 | wip | wip | ||
| 'type-name': class has virtual functions, but its trivial destructor is not virtual; instances of objects derived from this class may not be destructed correctly | C5204 | -Wnon-virtual-dtor | -Wnon-virtual-dtor | 'CLASS' has virtual functions but non-virtual destructor | ☑️ |
| delete of an abstract class 'type-name' that has a non-virtual destructor results in undefined behavior | C5205 | wip | wip | ||
| deduced return types for coroutines is a non-standard extension | C5206 | wip | wip | ||
| the simple requirement asserts the validity of expression 'e->id'. Did you mean '{ e } -> id'? You can suppress the warning using '{ e->id }' | C5207 | wip | wip | ||
| unnamed class used in typedef name cannot declare members other than non-static data members, member enumerations, or member classes | /W1 C5208,error C7626 | error | error | ||
| C5219 | NOWARN | -Wimplicit-int-float-conversion | implicit conversion from 'int' to 'float' may lose precision | ☑️ |
| Summary | Visual Studio | GCC | Clang | Clang message | is Same |
|---|---|---|---|---|---|
| - | - | -Wabsolute-value | taking the absolute value of unsigned type 'unsigned char' has no effect | ||
| - | - | -Wambiguous-reversed-operator | ISO C++20 considers use of overloaded operator '==' (with operand types 'TYPE' and 'TYPE') to be ambiguous despite there being a unique best viable function | ||
| - | - | -Wcovered-switch-default | default label in switch which covers all enumeration values | ||
| int x = NULL; | - | -Wconversion-null | -Wnull-conversion | implicit conversion of NULL constant to 'TYPE' | |
| if .. else .. | - | -Wdangling-else | -Wdangling-else | add explicit braces to avoid dangling else | |
| - | - | -Wdangling-gsl | object backing the pointer will be destroyed at the end of the full-expression | ||
| - | -Wdouble-promotion | -Wdouble-promotion | implicit conversion increases floating-point precision: 'float' to 'double' | ||
| - | NOWARN | -Wabstract-final-class | abstract class is marked 'final' | ||
| - | - | -Wexit-time-destructors | declaration requires an exit-time destructor | ||
| - | - | -Wglobal-constructors | declaration requires a global destructor | ||
| - | - | -Winconsistent-missing-override | 'NAME' overrides a member function but is not marked 'override' | ||
| - | - | -Winconsistent-missing-destructor-override | 'NAME' overrides a destructor but is not marked 'override' | ||
| - | - | -Wmissing-braces | suggest braces around initialization of subobject | ||
| - | - | -Wnull-arithmetic | comparison between NULL and non-pointer ('nullptr_t' and NULL) | ||
| - | -Wmissing-noreturn(-Wsuggest-attribute=noreturn) | -Wmissing-noreturn | function 'NAME' could be declared with attribute 'noreturn' | ||
| - | -Wshadow | -Wshadow-field-in-constructor | constructor parameter 'VAR' shadows the field 'VAR' of 'CLASS' | ||
| -Wshadow-compatible-local | -Wshadow-uncaptured-local | declaration shadows a local variable | |||
| - | -Wsuggest-override | -Wsuggest-override | 'NAME' overrides a member function but is not marked 'override' | ||
| - | - | -Wsuggest-destructor-override | 'NAME' overrides a destructor but is not marked 'override' | ||
| - | - | -Wparentheses-equality | equality comparison with extraneous parentheses | ||
| #define __HOGE | - | - | -Wreserved-id-macro | macro name is a reserved identifier | |
| int* p=0; | - | - | -Wzero-as-null-pointer-constant | zero as null pointer constant | |
| - | - | -Wgnu-zero-variadic-macro-arguments | must specify at least one argument for '...' parameter of variadic macro |
C only warning??
This warning is off by default.
- VS2017
Obsolete: This warning is not generated by Visual Studio 2017 and later versions.