|
5 | 5 | // |
6 | 6 | // See https://github.com/philsquared/Clara for more details |
7 | 7 |
|
8 | | -// Clara v1.1.1 |
| 8 | +// Clara v1.1.2 |
9 | 9 |
|
10 | 10 | #ifndef CLARA_HPP_INCLUDED |
11 | 11 | #define CLARA_HPP_INCLUDED |
@@ -670,12 +670,14 @@ namespace detail { |
670 | 670 | struct BoundRef : NonCopyable { |
671 | 671 | virtual ~BoundRef() = default; |
672 | 672 | virtual auto isContainer() const -> bool { return false; } |
| 673 | + virtual auto isFlag() const -> bool { return false; } |
673 | 674 | }; |
674 | 675 | struct BoundValueRefBase : BoundRef { |
675 | 676 | virtual auto setValue( std::string const &arg ) -> ParserResult = 0; |
676 | 677 | }; |
677 | 678 | struct BoundFlagRefBase : BoundRef { |
678 | 679 | virtual auto setFlag( bool flag ) -> ParserResult = 0; |
| 680 | + virtual auto isFlag() const -> bool { return true; } |
679 | 681 | }; |
680 | 682 |
|
681 | 683 | template<typename T> |
@@ -907,7 +909,7 @@ namespace detail { |
907 | 909 | if( token.type != TokenType::Argument ) |
908 | 910 | return InternalParseResult::ok( ParseState( ParseResultType::NoMatch, remainingTokens ) ); |
909 | 911 |
|
910 | | - assert( dynamic_cast<detail::BoundValueRefBase*>( m_ref.get() ) ); |
| 912 | + assert( !m_ref->isFlag() ); |
911 | 913 | auto valueRef = static_cast<detail::BoundValueRefBase*>( m_ref.get() ); |
912 | 914 |
|
913 | 915 | auto result = valueRef->setValue( remainingTokens->token ); |
@@ -983,14 +985,14 @@ namespace detail { |
983 | 985 | if( remainingTokens && remainingTokens->type == TokenType::Option ) { |
984 | 986 | auto const &token = *remainingTokens; |
985 | 987 | if( isMatch(token.token ) ) { |
986 | | - if( auto flagRef = dynamic_cast<detail::BoundFlagRefBase*>( m_ref.get() ) ) { |
| 988 | + if( m_ref->isFlag() ) { |
| 989 | + auto flagRef = static_cast<detail::BoundFlagRefBase*>( m_ref.get() ); |
987 | 990 | auto result = flagRef->setFlag( true ); |
988 | 991 | if( !result ) |
989 | 992 | return InternalParseResult( result ); |
990 | 993 | if( result.value() == ParseResultType::ShortCircuitAll ) |
991 | 994 | return InternalParseResult::ok( ParseState( result.value(), remainingTokens ) ); |
992 | 995 | } else { |
993 | | - assert( dynamic_cast<detail::BoundValueRefBase*>( m_ref.get() ) ); |
994 | 996 | auto valueRef = static_cast<detail::BoundValueRefBase*>( m_ref.get() ); |
995 | 997 | ++remainingTokens; |
996 | 998 | if( !remainingTokens ) |
|
0 commit comments