
AMDG David Abrahams wrote:
I don't think that accurately characterizes the issue. I think few compilers do anything to detect ODR violations. However, link-time stripping of common template instantiations (or link-time instantiation) seems likely to cause only a single behavior in both TUs where two behaviors may have been intended.
I'm sorry I wasn't clear. What I meant was that it's quite difficult to implement a test to see whether a given overload is present, so it isn't used very often. The real danger of course, is that when multiple functions depend on the presence of absence of an overload, the linker can select definitions of two functions which are incompatible.
but I'm very concerned because C++0x concepts are supposed to make such overloading easy.
I'm not sure I see the relationship to C++0x concepts. Care to say more?
I think that templates which are vulnerable to this kind of nastiness are likely to be much more common with C++0x concepts. That's all. I'm thinking that the most reliable way to deal with this is to /always/ provide forward declarations of functions that should be found by ADL, even if they are defined in a separate header. In Christ, Steven Watanabe