This allows us to work around bugs in the implementation of these kinds of data members in the Microsoft Visual C++ compilers (especially when dlls are involved it is difficult to get only one definition of the data member to be generated).
Because of these bugs a common pattern for windows programmers is to put the initialization in the header file and leave out the definition in the implementation file, which prevents the dictionary from taking the address of the data member (since it has none), so we change to use only the value, not the address.
Unfortunately the C++ standard explicitly allows these kind of data members to have no definition if they are not used in the program, see section 9.4.2 paragraph 4 of ISO/IEC 14882:1998(E).
In the case where a data member of this kind is not initialized in the header file and there is no definition in the source file, a link time error will be generated by the dictionary file.
Note that this is caused by the programmer forgetting to define the data member, but the error is usually hidden until code attempts to use it, which the dictionary must do.