|
Boost : |
Subject: Re: [boost] [Hana] Informal review request
From: Louis Dionne (ldionne.2_at_[hidden])
Date: 2015-03-07 13:09:26
Louis Dionne <ldionne.2 <at> gmail.com> writes:
>
> Vicente J. Botet Escriba <vicente.botet <at> wanadoo.fr> writes:
>
> > [...]
> >
> > Compile-time error reporting
> > --------------------
> >
> > I would expect that the library provide some king of "TypeClass" check
> > use (As Eric's Range library does with Concepts) so that the compile
> > time errors are more explicit.
>
> Doing this for all parameters of all functions is intractable
> due to the heterogeneous context, but basic support could
> be added easily. I'm promoting this on my todo list.
Before I go an change the code, I'd like to make sure I understand
your comment properly. Currently, if you use a method with a parameter
that does not model the required concept, you'll get an assertion.
For example,
hana::head(1);
Produces
[...] error: static_assert failed
"no definition of boost::hana::head for the given data types"
static_assert(wrong<head_impl<It>, Xs>{},
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~
[...] note: in instantiation of function template specialization
'boost::hana::head_impl<int, boost::hana::when<true> >::apply<int>'
requested here
return head_impl<typename datatype<Xs>::type>::apply(
^
[...] note: in instantiation of function template specialization
'boost::hana::_head::operator()<int>' requested here
hana::head(1);
The check is currently being done in the base case of the
tag-dispatched method, `head_impl`. It could also be done
higher up, in the "interface method", i.e. `head` itself.
For example, here's what I experimented with locally:
hana::head(1);
Produces
[...] error: static_assert failed
"hana::head(xs) requires xs to be an Iterable"
static_assert(models<Iterable(typename datatype<Xs>::type)>{},
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[...] note: in instantiation of function template specialization
'boost::hana::_head::operator()<int>' requested here
hana::head(1);
Is this the kind of improvement you were talking about, or
was it something else entirely? Regardless, I like this
better than my current system and I'll probably do it,
but I'd like to make sure I understand your point.
Louis
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk