Boost logo

Boost :

From: Nicola Musatti (Nicola.Musatti_at_[hidden])
Date: 2006-10-20 17:55:25

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 { };

   boost::function_requires< boost::EqualityComparableConcept<foo> >();
   return 0;

What am I missing? Thanks for your help.

Nicola Musatti

Boost list run by bdawes at, gregod at, cpdaniel at, john at