Re: [PATCH] [gdb/build] Fix cli/cli-style.c build error with C++20
Eli Zaretskii <[email protected]>
| Newsgroups | gmane.comp.gdb.patches |
|---|---|
| Message-ID | <[email protected]> |
> From: Tom de Vries <[email protected]> > Date: Thu, 13 Aug 2026 04:54:45 +0200 > > PR build/34514 reports for a C++20 build: > ... > cli/cli-style.c:457:37: error: conversion from ‘const char8_t [8]’ to \ > non-scalar type ‘std::string’ {aka ‘std::__cxx11::basic_string<char>’} \ > requested > 457 | static std::string warning_prefix = u8"\u26A0\uFE0F "; > | ^~~~~~~~~~~~~~~~~ > ... > > The u8 literal is char[] until C++20, but char8_t[] since C++20. > > Fix this by using a reinterpret_cast<const char *>. > > Tested by rebuilding using GCC 15.3.0, with and without -std=c++20. > > Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=34514 > --- > gdb/cli/cli-style.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/gdb/cli/cli-style.c b/gdb/cli/cli-style.c > index 60c00acdf43..5c26519c6d7 100644 > --- a/gdb/cli/cli-style.c > +++ b/gdb/cli/cli-style.c > @@ -454,7 +454,8 @@ no_emojis () > - uFE0F: Variation Selector-16 (VS16) > The VS16 forces "Emoji" presentation. It is needed because the default > presentation for Warning Sign is "Text". Together, we get: ⚠️ . */ > -static std::string warning_prefix = u8"\u26A0\uFE0F "; > +static std::string warning_prefix > + = reinterpret_cast<const char *> (u8"\u26A0\uFE0F "); > > /* Implement 'show style warning-prefix'. */ > > @@ -479,7 +480,8 @@ print_warning_prefix (ui_file *file) > - u274C: Cross Mark: ❌ > No VS16 is needed because the default presentation for Cross Mark is > "Emoji". */ > -static std::string error_prefix = u8"\u274C "; > +static std::string error_prefix > + = reinterpret_cast<const char *> (u8"\u274C "); Thanks. May I suggest to add comments here explaining why we use reinterpret_cast? The situation with the various C++ standards changes with time, as we require newer versions of the standard, so at some point this will no longer be needed. And use of reinterpret_cast is unusual enough to raise some brows anyway.