« Casting delegates | Main | Image Format Error when Loading from a Stream »

August 15, 2008

Fix for error C2373 after upgrading to VS2008 SP1

After upgrading to Visual Studio 2008 Service Pack 1, you may receive the following error when compiling C++ code:

C:\Program Files\VStudio9\VC\include\intrin.h(204) : error C2373: '_InterlockedCompareExchange' : redefinition; different type modifiers
        C:\Program Files\VStudio9\VC\include\memory(995) : see declaration of '_InterlockedCompareExchange'

This bug was first noted in the comments to the release notes for the Visual C++ 2008 Feature Pack. The Visual C++ team added a workaround in the final release of VC9 SP1; this workaround is buried (as point #13) in the TR1 fixes post.

To fix the problem, define the symbol _DO_NOT_DECLARE_INTERLOCKED_INTRINSICS_IN_MEMORY for the affected project. I found that it was easiest to do this by adding these two lines to StdAfx.h:

#define _DO_NOT_DECLARE_INTERLOCKED_INTRINSICS_IN_MEMORY

#include <intrin.h>

Posted by Bradley Grainger at August 15, 2008 4:55 PM

Trackback Pings

TrackBack URL for this entry:
http://blog.logos.com/mt-cgi/mt-tb.cgi/227

Comments

Post a comment




(you may use HTML tags for style)