
are you saying that you can check if the return type is actually void? I believed that this was not possible, but who knows ...
If you look at the implementation, I must separate implementation for operators returning void and operators returning non-void. So I know if the operator returns void or not: // this intermediate trait has member value of type bool: // - value==true -> operator- returns void // - value==false -> operator- does not return void template < typename RHS > struct operator_unary_minus_returns_void { // overloads of function returns_void make the difference // yes_type and no_type have different size by construction static ::boost::type_traits::yes_type returns_void(returns_void_t); static ::boost::type_traits::no_type returns_void(int); static const bool value=(sizeof(::boost::type_traits::yes_type)==sizeof(returns_void((-make<RHS>(),returns_void_t())))); }; So it seems that the best would be to have a default RET to do_no_check and having RET=void really checking if operator- returns void. Of course this needs checking... if it really works. Frédéric