|
Boost : |
From: John Maddock (jm_at_[hidden])
Date: 2003-01-31 07:01:38
> The technique I know relies on detecting whether the template argument
> is *derived* from some policy, and that's doable with expressions.
> That's why I asked you what was the exact technique you were using.
> Also, if you have any (other) example where "convertibility of a type"
> is needed I would be glad to see it, because this is IMHO a crucial
> point.
Yes, it's really a derived from test, so is_base_and_derived would do I
guess. Which brings us back to things like:
template <class I>
struct is_bidirectional_iterator
{
private:
typedef typename std::iterator_traits<I>::iterator_category cat;
public:
BOOST_STATIC_CONSTANT(bool, value = (::boost::is_convertible<cat*,
std::bidirectional_iterator_tag*>::value));
};
BTW, in any case, you can always "invent" a variable in order to make the
test, likewise I don't think there are any situations where you have a
variable and not a type. Perhaps my main argument is philosophical: I
think that the current solution is well understood and easy to use, and it
*conceptually* fits in well with the other type traits. IMO a free function
is more like a code snippet that a packaged solution: but that is very much
a personal preference.
John Maddock
http://ourworld.compuserve.com/homepages/john_maddock/index.htm
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk