[concept_check] Why should this fail to link?

Hallo, I was looking at the concept_check tests that fail for Borland and I can't understand why they're expected to compile but not to link. If I haven't made any mistake the following should be a stripped down version of concept_check_fail_expected, which is marked as link_fail (the comments are mine - feel free to correct me): #include <boost/mpl/identity.hpp> namespace boost { // mpl::identity is used to ensure that the Concept argument is not instantiated when function_requires is template <class Concept> inline void function_requires(mpl::identity<Concept>* = 0) { // this causes Concept::constraints to be instantiated - // and nothing else void (Concept::*x)() = &Concept::constraints; } // This enforces the "convertible to bool" requirement template <class TT> void require_boolean_expr(const TT& t) { bool x = t; } template <class TT> struct EqualityComparableConcept { // Why shouldn't this just fail to compile due to operator== not being // defined for foo? void constraints() { require_boolean_expr(a == b); } TT a, b; }; } // namespace boost struct foo { }; int main() { boost::function_requires< boost::EqualityComparableConcept<foo> >(); return 0; } What am I missing? Thanks for your help. Cheers, Nicola Musatti
participants (1)
-
Nicola Musatti