[cfe-commits] [Patch][Review] constexpr-ification of <limits> and random number generators
Howard Hinnant
hhinnant at apple.com
Sun Apr 1 11:40:42 PDT 2012
On Apr 1, 2012, at 2:38 PM, Richard Smith wrote:
> On Sun, Apr 1, 2012 at 11:23 AM, Howard Hinnant <hhinnant at apple.com> wrote:
> On Apr 1, 2012, at 3:33 AM, Jonathan Sauer wrote:
>
> > Hello,
> >
> > the attached patch constexpr-ifies <limits> as specified in FDIS as well as removes the
> > workarounds in libc++'s random number generators due to missing constexpr (the workarounds
> > don't work when using a non-standard PRNG). The corresponding tests are modified as well.
> >
> > Please review and, if ok, commit.
> >
> >
> > With many thanks in advance,
> > Jonathan
>
> Thanks Jonathan. I've been meaning to take care of this. The current libc++ is a mess with respect to constexpr.
>
> One of the things I want to do is to allow libc++ to emulate correct behavior even when it is compiled in C++03 mode. And I don't believe this patch will do this.
>
> Another thing that is wrong is that I have an ugly hack in <__config> that needs to be fixed:
>
> #ifdef _LIBCPP_HAS_NO_CONSTEXPR
> #define constexpr const
> #endif
>
> This is just wrong, but taking it out is going to take a little more work. I haven't nailed down exactly how we want to support both C++03 and C++11 mode, but I'm imagining something similar to the way we're handling noexcept:
>
> #ifndef _LIBCPP_HAS_NO_CONSTEXPR
> #define _CONSTEXPR_1 constexpr
> #define _CONSTEXPR_0 constexpr
> #else
> #define _CONSTEXPR_1 const
> #define _CONSTEXPR_0
> #endif
>
> (better macro names would be great!)
>
> Like I said, this has been on my to-do list, and I guess now is the time.
>
> How about just:
>
> #ifndef _LIBCPP_HAS_NO_CONSTEXPR
> #define _LIBCPP_CONSTEXPR constexpr
> #else
> #define _LIBCPP_CONSTEXPR
> #endif
>
> Then use
>
> _LIBCPP_CONSTEXPR const int n = 5;
>
> for variables, and
>
> struct S {
> _LIBCPP_CONSTEXPR int f() const;
> };
>
> for functions.
Your survey/mapping is helpful. But what about constexpr constructors?
Howard
More information about the cfe-commits
mailing list