-----Original Message----- From: Boost [mailto:boost-bounces@lists.boost.org] On Behalf Of Billy O'Neal (VC LIBS) Sent: 23 June 2016 15:29 To: boost@lists.boost.org; boost@lists.boost.org 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. http://en.cppreference.com/w/cpp/language/constexpr says 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: template<typename FloatingPointType> ... BOOST_CONSTEXPR_OR_CONST bool is_neg = (f < FloatingPointType(0)); and // 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. Paul
On Thu, Jun 23, 2016 at 7:23 AM -0700, "Paul A. Bristow"
mailto:pbristow@hetp.u-net.com> wrote: -----Original Message----- From: Boost [mailto:boost-bounces@lists.boost.org] 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
https://na01.safelinks.protection.outlook.com/?url=https%3a%2f%2fconnect.mic... 2fdetails%2f2849367&data=01%7c01%7cbion%40microsoft.com%7cff91fe2ba4ea4628db3908d39b71f2e8%7c72f988bf86f1 41af91ab2d7cd011db47%7c1&sdata=s%2fuVgTFXoqGoAfgDEOSv%2bgo5ZkyDQ%2b03m8B6of9icHw%3d
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 version).
Lack of this is a showstopper when trying to define any (mathy) function where it is impossible/impractical to provide a single return statement.
Paul
--- Paul A. Bristow Prizet Farmhouse Kendal UK LA8 8AB +44 (0) 1539 561830
_______________________________________________ Unsubscribe & other changes: https://na01.safelinks.protection.outlook.com/?url=http%3a%2f%2flists.boost.org%2fmailman%2flistinfo.cgi%2fboost&dat a=01%7c01%7cbion%40microsoft.com%7cff91fe2ba4ea4628db3908d39b71f2e8%7c72f988bf86f141af91ab2d7cd011db47% 7c1&sdata=immCBtMvwc7pb3rBkSnywDK4BntAtJrgyEI0MjjAaHU%3d
_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost