[cfe-dev] Visual Studio 9 2008 compile error in ASTContext.cpp
Stephan T. Lavavej
stl at exchange.microsoft.com
Wed Jun 20 16:49:10 PDT 2012
[Manjunath Kudlur]
> I am getting the following error when compiling clang with Visual Studio 9 2008 (cmake -G "Visual Studio 9 2008").
clang is invoking lower_bound() with a heterogeneous comparison - the provided value is of a different type than the elements. VC8 and VC9 have debug checks that perform homogenous comparisons (to ensure that the input range is actually sorted), so you get a compiler error if homogeneous comparisons aren't available. Technically, this behavior was conformant according to C++03.
C++11's requirements were relaxed, permitting heterogeneous comparisons. Accordingly, we commented out lower_bound and upper_bound's debug checks (as an aside, we forgot equal_range, oops - this is on my todo list). So VC10+ will work here.
Even though you should *really* upgrade, there are a couple of workarounds for VC9. You could disable the debug checks, although if you're not careful this will explode horribly. To do this, define _HAS_ITERATOR_DEBUGGING to 0 globally (ideally, on the command line). Alternatively, if the element type and the value type have the "same ordering", then a source workaround is to have the comparator also provide the (ElementType, ElementType) comparison that the debug checks want.
Stephan T. Lavavej
Visual C++ Libraries Developer
More information about the cfe-dev
mailing list