'Error! constexpr variable must be initialized by a constant expression constexpr

// The constant base "a" that is being used to compute f_{ut}.
constexpr float A_CONST = 6.76;

// The max number of ratings by any given user on a given date. This
// was found by create_f_u_t.py.
constexpr int MAX_NUM_RAT_USER_DATE = 2651;

// The maximum possible value for f_{ut} is the floor of the log base
// "a" of the maximum number of ratings by any user on a given date.
auto BB = std::floor(std::log(MAX_NUM_RAT_USER_DATE)/std::log(A_CONST));


constexpr int MAX_F_U_T = BB;

It gives me error! When I compile, it

says: error: constexpr variable 'MAX_F_U_T' must be initialized by a constant expression constexpr int MAX_F_U_T = BB;



Solution 1:[1]

You can get constexpr versions of std::floor and std::log in GCC, but I don't think it is ISO C++. Also don't forget to make BB a constexpr as well.

#include <cmath>

int main()
{
  // The constant base "a" that is being used to compute f_{ut}.
  constexpr float A_CONST = 6.76;

  // The max number of ratings by any given user on a given date. This
  // was found by create_f_u_t.py.
  constexpr int MAX_NUM_RAT_USER_DATE = 2651;

  // The maximum possible value for f_{ut} is the floor of the log base
  // "a" of the maximum number of ratings by any user on a given date.
  constexpr auto BB = std::floor(std::log(MAX_NUM_RAT_USER_DATE)/std::log(A_CONST));

  constexpr int MAX_F_U_T = BB;
}

Demo on Wandbox

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Henri Menke