// // cast.h // string-utils // // Created by Sam Jaffe on 2/13/21. // Copyright © 2021 Sam Jaffe. All rights reserved. // #pragma once #include #include #include #include #include #include #include #include #include "any_of.h" #define SAFE_NUMBER_PARSE(func, ...) \ [](char const *in, char **out) { return func(in, out, ##__VA_ARGS__); } namespace string_utils { // A helper object for providing partial specializations for casting template struct cast_helper {}; // The main parser template std::pair cast(S const &str) noexcept; template bool cast(std::string_view str, T & to) noexcept; template bool cast(std::vector const &strs, T & to) noexcept; } namespace string_utils::detail { template struct has_cast_helper : std::false_type {}; template struct has_cast_helper(S, T)>>> : std::true_type {}; template struct is_tuple : std::false_type {}; template struct is_tuple::type>> : std::true_type {}; template struct is_associative : std::false_type {}; template struct is_associative> : std::true_type {}; template struct is_container : std::false_type {}; template struct is_container> : std::true_type {}; template struct decay { using type = std::decay_t; }; template