| 331 | namespace string { |
| 332 | |
| 333 | template <unsigned n> struct StringLiteral { |
| 334 | char str[n + 1]; |
| 335 | constexpr StringLiteral(char const *ptr) noexcept { |
| 336 | for (unsigned i = 0; i < n; ++i) |
| 337 | str[i] = ptr[i]; |
| 338 | str[n] = '\0'; |
| 339 | } |
| 340 | static constexpr unsigned size = n; |
| 341 | |
| 342 | constexpr auto operator[](unsigned idx) const noexcept { return str[idx]; } |
| 343 | }; |
| 344 | |
| 345 | template <unsigned n> StringLiteral(char const (&)[n]) -> StringLiteral<n - 1>; |
| 346 |