// // traits.h // string-utils // // Created by Sam Jaffe on 6/12/22. // Copyright © 2022 Sam Jaffe. All rights reserved. // #pragma once #include #include namespace string_utils::detail { template struct has_result : std::false_type {}; template struct has_result>> : 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 using insert_t = decltype(std::declval().insert(std::declval(), std::declval())); template struct is_container : std::false_type {}; template struct is_container>> : std::true_type {}; template struct decay { using type = std::decay_t; }; template