there is symbol-injection via a using directive in Boost.Test which, although needed by Boost.Test, seems to cause the ambiguity.
Looking at trunk, the using directive brings the symbols into namespace ::boost::unit_test, not ::boost.
Exactly. There was one or two places where unit_test was injected into boost, but these are cleared for some time now.
I've no idea frankly *why* the compiler finds those types, but it certainly does do so - please take a look at the reduced test case in the bug report. I forget the namespace lookup rules now, but could your enable_if be in an associated namespace (the namespace of the base class of the unit test case) that gets searched during name lookup? Either way I believe in the long run we won't be the only ones hit by this, so I think it should be fixed in Boost.Test. Renaming those types seems like the easiest option? Thanks, John.