Using C++11, Ubuntu 14.04, GCC default toolchain.
This code fails:
constexpr std::string constString = "constString";
error: the type ‘const string {aka const std::basic_string}’ of constexpr variable ‘constString’ is not literal... because... ‘std::basic_string’ has a non-trivial destructor
Is it possible to use std::string
in aconstexpr
? (apparently not...) If so, how? Is there an alternative way to use a character string in a constexpr
?
Since the problem is the non-trivial destructor so if the destructor is removed from the
std::string
, it's possible to define aconstexpr
instance of that type. Like thisIn C++17, you can use
string_view
:A
string_view
is astring
-like object that acts as an immutable, non-owning reference to any sequence ofchar
objects.No, and your compiler already gave you a comprehensive explanation.
But you could do this:
At runtime, this can be used to construct a
std::string
when needed.