作为一个不存在评论中提到的转换问题的工作备选方案:
  
  struct rw_tag {};
struct ro_tag {};
template<typename CONT, typename NAME, typename TYPE,
         TYPE (CONT::*getter)() const, void (CONT::*setter)(TYPE const&)>
struct metafield_fun_rw : rw_tag {};
template<typename CONT, typename NAME, typename TYPE,
         TYPE (CONT::*getter)() const>
struct metafield_fun_ro : ro_tag {};
template<class T> struct field_writable 
  : boost::mpl::bool_< boost::is_base_of<rw_tag, T>::value >
// or just derive directly from: boost::is_base_of<rw_tag, T>::value
{};
typedef metafield_fun_ro<test, test_field, int, &test::testing> unwritable;
  
   替代地
   
    metafield_fun
   
   也可以
   
    typedef
   
   readwrite-/readonly标记取决于其参数和
   
    field_writable
   
   有条件地派生,比如使用
   
    boost::mpl::if_
   
   .