|
Boost : |
From: Aleksey Gurtovoy (agurtovoy_at_[hidden])
Date: 2002-11-09 23:45:04
Douglas Gregor wrote:
> On Saturday 09 November 2002 07:21 pm, Aleksey Gurtovoy wrote:
> [snip some code...]
> > template< typename T > yes_tag is_callable_helper(
> > sink< sizeof(&T::operator()) >*
> > );
> [snip more code...]
>
> Won't work if there are multiple overloads of operator() or
> if it is a function template, unfortunately :(
True.
> > But of course none of the compilers are particularly happy
> > about it. How about adding 'is_callable<>' to the type_traits
> > proposal and requesting a compiler support for it?
>
> We could, but I have a hunch that we wouldn't get it. The
> is_callable trait takes a lot of specification and only handles
> very specific cases. If we're going to ask for something like
> is_callable, we're better off asking for something that handles
> more cases (i.e., "is this expression valid?" or "can I
> instantiate this class template?").
That one is definitely needed. But I am not sure that these are mutually
exclusive wishes :). I mean, suppose we've got such facility, for instance
in form of '__is_well_formed' operator that can be used like this:
template< typename T >
struct has_key_type
: mpl::bool_c<__is_well_formed(typename T::key_type)>
{
};
or
template< typename T >
struct is_default_constructible
: mpl::bool_c<__is_well_formed(T())>
{
};
Would it be enough for you to implement the 'is_callable' trait with the
desired behavior?
Aleksey
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk