Похоже, ваш проект включает в себя стандартную функцию std::log2
, которую компилятор смешивает с вашей функцией log2
.Это может произойти, даже если вы не #include <cmath>
, потому что стандартные заголовки могут включать любые другие стандартные заголовки.Это также еще один пример using namespace std;
обратной реакции.
Одним из решений является переименование вашей constexpr
функции на другое:
#include <bitset>
#include <iostream>
using namespace std;
constexpr int logTwo(const unsigned int x) {
return x < 4 ? 1 : 1 + logTwo(x / 2);
}
int main() {
bitset<logTwo(2)> foo;
int bar[logTwo(8)];
cout << logTwo(8) << endl;
}
Демо
Редактировать: Кажется, что using namespace std;
может быть не связано в этом случае.В любом случае стандартная функция log2
может быть доступна в глобальном пространстве имен.