I've improved my solution by:
==============================================================
template<class F>
void testEnum(const F & f)
{
BOOST_STATIC_ASSERT(!boost::is_enum<boost::function_traits<boost::remove_pointer<F>::type >::result_type >::value);
}
template<void (*)()>
struct Dummy {
static const bool value = true;
};
template <typename ContractType>
class C {
private:
static void verify()
{
testEnum(&ContractType::st1);
testEnum(&ContractType::st2);
}
BOOST_STATIC_ASSERT(Dummy<&C::verify>::value);
};
==============================================================
So the problem I noticed is solved.