boostorg / static_string

A fixed capacity dynamically sized string
http://boost.org/libs/static_string
Boost Software License 1.0
62 stars 29 forks source link

`constexpr boost::static_strings::basic_static_string s( "name" );` fails #55

Open pdimov opened 9 months ago

pdimov commented 9 months ago

constexpr boost::static_strings::basic_static_string s( "name" ); fails to compile (under C++20): https://godbolt.org/z/fvPs3rxa7

Background: in order to write functions that take strings as template arguments, as in function<"string">(), one needs to declare the template parameter a static string, because neither char const* nor std::string_view work.

To avoid needless reinvention of static strings, ours should (probably) be useful in this role. But it isn't, for at least the reason above.

sdkrystian commented 9 months ago

@pdimov This is because of a shortsighted design choice I made to optimize zero size strings, accomplished via a virtual base class. Removing this and making the non-static data members public would allow for it to be used as a NTTP.

pdimov commented 9 months ago

I think this specific problem isn't caused by the class not being structural, though. The error comes from std::char_traits.

pdimov commented 9 months ago

Looks like an issue with libstdc++.

pdimov commented 9 months ago

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113200