I'm writing a function as part of an experiment with Boost.Interprocess. In the function I assign a string literal to a variable declared constexpr char*. When I do this, I get:
warning: deprecated conversion from string constant to char* [-Wwrite-strings].
My understanding of constexpr is that in a variable declaration it behaves as if the variable was declared const, but with the added stipulation that the variable must be initialized, and that initialization must be with a constant expression.
With this understanding I would expect constexpr char* to behave as const char*, and therefore not issue the warning. Am I missing something about how constexpr works?
I'm compiling with GCC 4.6.0 20110306 using -std=c++0x.
Any reasoning for the warning being issued would be appreciated. Thanks!
The const from constexpr would make your variable char* const. 
You still have the problem that the string literal is const char and that converting its address to char* is allowed, but deprecated.
For another solution to this:
Instead of-
constexpr char* foo = "bar";
You can do-
constexpr char foo[] = "bar";
This will also get rid of the warning.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With