Warning: ISO C++ forbids converting a string constant to ‘char*’ for a static `constexpr char*` data member
constexpr
does imply const
, but in this case it applies const
to the "wrong thing".
constexpr char*
is basically the same as
char * const
which is a constant pointer to a non-const char
. This won't work because string literals have the type const char[N]
so it would cast away the constness of the array elements.
constexpr const char*
on the other hand, is basically the same as
char const * const
which is a constant pointer to a constant char
, which is what you want as it preserves the constness of the elements.
There is a usual difference between a constant pointer and a pointer to constant. By making your constexpr char*
you made a pointer itself a constexpr
(and, of course, const
), but it still attempts to point at non-const character - and this is wrong, as string literals are const
. Solution:
constexpr const char* ch = "StackOverflow!";
Which declares a constexpr
pointer to const
.