Boost logo

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 :(


> > 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)>


    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?


Boost list run by bdawes at, gregod at, cpdaniel at, john at