From 384002b7e9000f68b9e2d05d832e3c8470666748 Mon Sep 17 00:00:00 2001 From: dhmemi Date: Sat, 11 Apr 2020 18:44:30 +0800 Subject: partail support MSVC12(Visual Studio 2013) --- args.hxx | 46 ++++++++++++++++++++++++++++++++++------------ 1 file changed, 34 insertions(+), 12 deletions(-) diff --git a/args.hxx b/args.hxx index f784538..7fe0f4e 100644 --- a/args.hxx +++ b/args.hxx @@ -46,6 +46,10 @@ #include #include +#if defined(_MSC_VER) && _MSC_VER <= 1800 +#define noexcept +#endif + #ifdef ARGS_TESTNAMESPACE namespace argstest { @@ -1007,11 +1011,29 @@ namespace args namespace detail { - template - struct IsConvertableToString : std::false_type {}; + template + using vector = std::vector>; + + template + using unordered_map = std::unordered_map, + std::equal_to, std::allocator > >; + + template + class is_streamable + { + template + static auto test(int) + -> decltype( std::declval() << std::declval(), std::true_type() ); + + template + static auto test(...) -> std::false_type; + + public: + using type = decltype(test(0)); + }; template - struct IsConvertableToString() << std::declval(), int())> : std::true_type {}; + using IsConvertableToString = typename is_streamable::type; template typename std::enable_if::value, std::string>::type @@ -3430,7 +3452,7 @@ namespace args */ template < typename T, - template class List = std::vector, + template class List = detail::vector, typename Reader = ValueReader> class NargsValueFlag : public FlagBase { @@ -3550,7 +3572,7 @@ namespace args */ template < typename T, - template class List = std::vector, + template class List = detail::vector, typename Reader = ValueReader> class ValueFlagList : public ValueFlagBase { @@ -3670,7 +3692,7 @@ namespace args typename K, typename T, typename Reader = ValueReader, - template class Map = std::unordered_map> + template class Map = detail::unordered_map> class MapFlag : public ValueFlagBase { private: @@ -3757,9 +3779,9 @@ namespace args template < typename K, typename T, - template class List = std::vector, + template class List = detail::vector, typename Reader = ValueReader, - template class Map = std::unordered_map> + template class Map = detail::unordered_map> class MapFlagList : public ValueFlagBase { private: @@ -3948,7 +3970,7 @@ namespace args */ template < typename T, - template class List = std::vector, + template class List = detail::vector, typename Reader = ValueReader> class PositionalList : public PositionalBase { @@ -4069,7 +4091,7 @@ namespace args typename K, typename T, typename Reader = ValueReader, - template class Map = std::unordered_map> + template class Map = detail::unordered_map> class MapPositional : public PositionalBase { private: @@ -4149,9 +4171,9 @@ namespace args template < typename K, typename T, - template class List = std::vector, + template class List = detail::vector, typename Reader = ValueReader, - template class Map = std::unordered_map> + template class Map = detail::unordered_map> class MapPositionalList : public PositionalBase { private: -- cgit v1.2.1