From c4033b8c2028efeb9bac236e6b279bdcd8efec34 Mon Sep 17 00:00:00 2001 From: Claudius Holeksa Date: Tue, 18 Apr 2023 18:34:29 +0200 Subject: First commit to restructure the forstio repo --- forstio/core/string_literal.h | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 forstio/core/string_literal.h (limited to 'forstio/core/string_literal.h') diff --git a/forstio/core/string_literal.h b/forstio/core/string_literal.h new file mode 100644 index 0000000..d530a54 --- /dev/null +++ b/forstio/core/string_literal.h @@ -0,0 +1,40 @@ +#pragma once + +#include +#include + +namespace saw { +/** + * Helper object which creates a templated string from the provided string + * literal. It guarantees compile time uniqueness and thus allows using strings + * in template parameters. + */ +template class string_literal { +public: + constexpr string_literal(const CharT (&input)[N]) noexcept { + for (size_t i = 0; i < N; ++i) { + data[i] = input[i]; + } + } + + std::array data{}; + + constexpr std::string_view view() const noexcept { + return std::string_view{data.data()}; + } + + constexpr bool + operator==(const string_literal &) const noexcept = default; + + template + constexpr bool + operator==(const string_literal &) const noexcept { + return false; + } +}; + +template +constexpr string_literal operator""_key() { + return string_literal{Chars..., '\0'}; +} +} // namespace saw -- cgit v1.2.3