Ich versuche, einige vorhandenen Code zu machen constexpr, aber immer NachrichtZeichenkette erklärt statisch in constexpr Funktion
Fehler: 'my_string' erklärt 'static' in 'constexpr' Funktion
stark vereinfacht, die Code:
template <typename T>
constexpr
int foo(const int x)
{
static // error: 'my_string' declared 'static' in 'constexpr' function
constexpr char my_string[] = "my foo error message!";
if (x == 0)
{
std::cout << my_string << std::endl;
}
return x;
}
class boo
{
public:
constexpr boo()
{
static // error: 'constructor_string' declared 'static' in 'constexpr' function
constexpr char constructor_string[] = "my constructor error message.";
}
};
die Saiten werden an anderer Stelle natürlich verwendet, und ich möchte, um sicherzustellen, dass sie nie dupliziert werden (so statisch) (und ich mag die Verwendung von statischen Gründen der Kompatibilität mit C + halten +03, wo der consExpr nicht verfügbar ist, indem BOOST_CONSTEXPR_OR_CONST verwendet).
Müssen Sie Array anstelle von C-String-Zeiger haben? Nicht 'const char * my_string; 'genug? – Jarod42
BTW, 'std :: cout <<' ist nicht "constexpr". – Jarod42
Setzen Sie die Variable in einen anonymen Namespace außerhalb der Funktion und verwenden Sie die BOOST_CONSTEXPR_OR_CONST cv darauf. – kfsone