vendredi 28 juillet 2017

static_assert fails when test condition includes constants defined with const?

I'm reading Bjarne Stroustrup's book, "The C++ Programming Language" and I found an example explaining that static_assert. What I understood is that static_assert only works with things that can be expressed by constant expressions. In other words, it must not include an expression that's meant to be evaluated at runtime.

The following example was used in the book (I did sone changes in the code. But I don't think that should change anything that'd produced by the original example code given in the book.)

#include <iostream>

using namespace std;

void f (double speed)
{
    constexpr double C = 299792.468;
    const double local_max = 160.0/(60*60);
    static_assert(local_max<C,"can't go that fast");
}

int main()
{
        f(3.25);
    cout << "Reached here!";
    return 0;
}

The above gives a compile error. Here's it compiled using ideone: http://ift.tt/2eV5woW The exact code from the book example:

constexpr double C = 299792.458;
void f(double speed)
{ 
    const double local_max = 160.0/(60∗60);
    static_assert(speed<C,"can't go that fast"); // yes this is error
    static_assert(local_max<C,"can't go that fast");
 } 

Aucun commentaire:

Enregistrer un commentaire