[Bug libstdc++/105995] New: QoI: constexpr basic_string variable must use all of its SSO buffer

de34 at live dot cn gcc-bugzilla@gcc.gnu.org
Thu Jun 16 07:13:57 GMT 2022


            Bug ID: 105995
           Summary: QoI: constexpr basic_string variable must use all of
                    its SSO buffer
           Product: gcc
           Version: 12.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: de34 at live dot cn
  Target Milestone: ---

The current implementation in libstdc++ only supports constexpr
std::basic_string variable of static storage duration which uses all of its SSO

#include <string>

constexpr std::string str15{"0123456789abcde"};
// constexpr std::string str14{"0123456789abcd"}; // error: should we support
// constexpr std::string str16{"0123456789abcdef"}; // error: unsupportable

constexpr std::u16string u16str7{u"0123456"};
constexpr std::u32string u32str3{U"012"};

int main()
    // constexpr std::string strdyn{"0123456789abcde"}; // error: unsupportable

Compiler Explorer links:

I think constexpr string variable that requires heap allocation is currently
unimplementable, and constexpr string variable of dynamic storage duration
can't be supported by libstdc++-v3 without ABI breakage now.

However, should we allow shorter strings to be stored into constexpr
basic_string variables? We can do this by always fully initializing the SSO
buffer (if it's used) during constant evluation.

More information about the Gcc-bugs mailing list