Subject: Re: [boost] enabling constexpr with Visual studio 2015 Update 3 (RC)
From: Paul A. Bristow (pbristow_at_[hidden])
Date: 2016-06-23 11:46:30
> -----Original Message-----
> From: Boost [mailto:boost-bounces_at_[hidden]] On Behalf Of Billy O'Neal (VC LIBS)
> Sent: 23 June 2016 15:29
> To: boost_at_[hidden]; boost_at_[hidden]
> Subject: Re: [boost] enabling constexpr with Visual studio 2015 Update 3 (RC)
> That is C++14 constexpr; C1XX only supports C++11 constexpr.
I think it may even be a C++17 feature and I have tried /std:c++14 and /std:c++latest to try to enable this.
the function body must be either deleted or defaulted
* or contain any statements except:*
an asm declaration. Not this
a goto statement. No goto.
a statement with a label other than case and default. NO labels.
a try-block . No trying.
a definition of a variable of non-literal type. Is literal (int, float ...)
a definition of a variable of static or thread storage duration. No static.
a definition of a variable for which no initialization is performed. (variable IS initialized)
But maybe the language lawyers can advise if I am mistaken.
either way, it's a showstopper for taking existing code and making constexpr functions.
But there are more hurdles:
BOOST_CONSTEXPR_OR_CONST bool is_neg = (f < FloatingPointType(0));
// Extract the mantissa and exponent.
int exp2 = 0; // Initialize to make constexpr possible.
BOOST_CONSTEXPR_OR_CONST FloatingPointType fp(frexp((!is_neg) ? f : -f, &exp2));
both fail to compile on VS 2015 update 3 RC and GCC 5.8.0.
So there are hoops that look out of reach for now.
> On Thu, Jun 23, 2016 at 7:23 AM -0700, "Paul A. Bristow" <pbristow_at_[hidden]<mailto:pbristow_at_[hidden]>>
> > -----Original Message-----
> > From: Boost [mailto:boost-bounces_at_[hidden]] On Behalf Of Beman Dawes
> > Sent: 11 June 2016 17:06
> > To: Boost Developers List
> > Subject: Re: [boost] enabling constexpr with Visual studio 2015 Update 3 (RC)
> > You might want to read the thread "[config] Changes needed for VC++ 2015
> > Update 3?" if you have not already done so.
> > Please file a MSVC bug report if you hit any C++11 constexpr bugs in the
> > Update 3 RC. They giving very high priority to C++11 bugs affecting Boost
> > code. They would like us to be able to turn BOOST_NO_CXX11_CONSTEXPR off
> > for Update 3.
> Unless I am doing something very silly using VS 2015 Update 3 RC,
> it is not possible to declare and initialization any constexpr intermediate variables within a constexpr function.
> constexpr int tripled(int n)
> constexpr int f = 3; // C3250: 'f': declaration is not allowed in 'constexpr' function body
> // constexpr_variable_in_function.cpp(35) : error C3249 : illegal statement or sub - expression for 'constexpr' function
> return n * f;
> even using /std:c++latest
> Reported as
> My reading of C++17 draft is that is now an added feature, and this work with GCC 5.3.0 (not even the most recent
> Lack of this is a showstopper when trying to define any (mathy) function where it is impossible/impractical to provide a
> return statement.
> Paul A. Bristow
> Prizet Farmhouse
> Kendal UK LA8 8AB
> +44 (0) 1539 561830
> Unsubscribe & other changes:
> Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk