|
Boost : |
Subject: Re: [boost] [gsoc16] Can I quickly check if the below really is the best approach?
From: Nevin Liber (nevin_at_[hidden])
Date: 2016-01-14 12:57:54
On 14 January 2016 at 11:45, Gottlob Frege <gottlobfrege_at_[hidden]> wrote:
> On Wed, Jan 13, 2016 at 1:56 PM, Nevin Liber <nevin_at_[hidden]>
> wrote:
> > On 13 January 2016 at 12:25, Lee Clagett <forum_at_[hidden]> wrote:
> >
> >> The macro `STRING_VIEW` seems unnecessary because the `string_view`
> >> constructor taking a single NULL-terminated string is also
> >> `constexpr`.
> >>
> >
> > While the templated constructor for basic_string_view is constexpr, this
> > constructor for string_view cannot be used in a constexpr context because
> > char_traits<char>::length isn't constexpr. :-( See LWG 2232
> > <http://cplusplus.github.io/LWG/lwg-active.html#2232>.
> >
> > I've been told it works this way by design...
> >
> > So yes, we do need the macro.
>
> Can it be a constexpr function that returns an initializer list? Or
> something, anything,... I hate macros :-(
>
You should be able to write a constexpr length() function, then a constexpr
factory function which will return a string_view (calling the same
constructor that the macro does). It just won't use strlen() in
non-constexpr contexts, but we probably don't care for this use case.
-- Nevin ":-)" Liber <mailto:nevin_at_[hidden]> +1-847-691-1404
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk