/* * MIT License * * Copyright (c) 2016 Jacek Galowicz * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ #pragma once #include "typelist.hpp" namespace charlist { using namespace typelist; template struct char_t { static const constexpr char value {val}; }; template struct char_tl; template struct char_tl { using type = typelist::tl, typename char_tl::type>; }; template struct char_tl { using type = typelist::tl, typelist::null_t>; }; template using char_tl_t = typename char_tl::type; template struct string_list; template struct string_list { using next_piece = typename string_list< Str, Pos + 1, Str::str()[Pos + 1] >::type; using type = typelist::tl, next_piece>; }; template struct string_list { using type = typelist::null_t; }; template using string_list_t = typename string_list::type; template struct tl_to_varlist; template struct tl_to_varlist, restlist>, chars...> : public tl_to_varlist { }; template <> struct tl_to_varlist { static const char * const str() { return ""; } }; template struct tl_to_varlist { using list = char_tl; static const char * const str() { static constexpr const char string[] = {chars..., '\0'}; return string; } }; }