| // -*-c++-*- | |
| // vim: set ft=cpp: | |
| /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying | |
| file Copyright.txt or https://cmake.org/licensing for details. */ | |
| #pragma once | |
| #include <cstddef> | |
| #include <cm/string_view> | |
| namespace cm { | |
| /** A string_view that only binds to static storage. | |
| * | |
| * This is used together with the `""_s` user-defined literal operator | |
| * to construct a type-safe abstraction of a string_view that only views | |
| * statically allocated strings. These strings are const and available | |
| * for the entire lifetime of the program. | |
| */ | |
| class static_string_view : public string_view | |
| { | |
| static_string_view(string_view v) | |
| : string_view(v) | |
| { | |
| } | |
| friend static_string_view operator"" _s(const char* data, size_t size); | |
| }; | |
| /** Create a static_string_view using `""_s` literal syntax. */ | |
| inline static_string_view operator"" _s(const char* data, size_t size) | |
| { | |
| return string_view(data, size); | |
| } | |
| } // namespace cm | |
| using cm::operator"" _s; |