Collapse the table of content
Expand the table of content
Important This document may not represent best practices for current development, links to downloads and other resources may no longer be valid. Current recommended version can be found here. ArchiveDisclaimer


A symbol which enables errors in projects converted from previous versions of ATL.


Before version 7.0, ATL disabled a lot of warnings and left them disabled so that they never showed up in user code. Specifically:

  • C4127 conditional expression is constant

  • C4786 'identifier' : identifier was truncated to 'number' characters in the debug information

  • C4201 nonstandard extension used : nameless struct/union

  • C4103 'filename' : used #pragma pack to change alignment

  • C4291 'declaration' : no matching operator delete found; memory will not be freed if initialization throws an exception

  • C4268 'identifier' : 'const' static/global data initialized with compiler generated default constructor fills the object with zeros

  • C4702 unreachable code

In projects converted from previous versions, these warnings are still disabled by the libraries headers.

By adding the following line to the stdafx.h file before including libraries headers, this behavior can be changed.


If this #define is added, the ATL headers are careful to preserve the state of these warnings so that they are not disabled globally (or if the user explicitly disables individual warnings, not to enable them).

New projects generated with version 7.0 will have this #define set in stdafx.h by default.

© 2015 Microsoft