I'm trying to play around with constexpr and static_assert. I actually need to check the length of a constexpr string, which is calculated by a dedicated function. Here is what I'm trying to run :
#include <iostream>
using namespace std;
class Test
{
private :
static constexpr char str[] = "abc";
static int constexpr constStrLength(const char* str)
{
return *str ? 1+constStrLength(str+1) : 0;
}
static constexpr int length = constStrLength(str);
static_assert(length ==3, "error");
public :
static void f()
{
cout << len << endl;
}
};
int main()
{
Test::f();
return 0;
}
And here is the error I get :
error: 'static constexpr int Test::constStrLength(const char*)' called in a constant expression static constexpr int len = constStrLength("length ");
What's the right way to achieve it ?
Thanks for help !
char str[] = "..."
? Because you could get the length simply assizeof(str)-1
in this form. – kennytmsizeof("abc\0def") - 1
yields7
while theconstStrLength()
function would yield3
. – Dietmar Kühl