constexpr vs consteval

constexpr (C++11) suggest compile time “resolution” while consteval (C++20) enforces it

constexpr int foo(int a)
{
    return a * 2;
}

consteval int bar(int a)
{
    return a * 2;
}

int
main(int  __attribute__((unused))  argc,
     char __attribute__((unused)) *argv[],
     char __attribute__((unused)) *envp[])
{
    int a;
    std::cin >> a;

    foo(a);
    foo(3);

    // bar(a); does not compile
    bar(3);

    return 0;
}

constexpr object requires static initialization and constexpr destruction