Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion include/argparse.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,13 @@ namespace argparse
using logic_error::logic_error;
};

class option_error
: public std::logic_error
{
public:
using logic_error::logic_error;
};

inline auto operator|(Handle lhs, Handle rhs) -> Handle
{
return static_cast<Handle>(static_cast<int>(lhs) | static_cast<int>(rhs));
Expand Down Expand Up @@ -1603,7 +1610,7 @@ namespace argparse
{
if (is_positional())
{
throw std::runtime_error("'required' is an invalid argument for positionals");
throw option_error("'required' is an invalid argument for positionals");
}
m_options.required = required;
return *this;
Expand Down
4 changes: 2 additions & 2 deletions test/unittest/test_argument_parser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -317,8 +317,8 @@ TEST_CASE("Adding a positional argument with required option set results in erro
{
auto parser = argparse::ArgumentParser();

CHECK_THROWS_WITH(parser.add_argument("pos").required(true), "'required' is an invalid argument for positionals");
CHECK_THROWS_WITH(parser.add_argument("pos").required(false), "'required' is an invalid argument for positionals");
CHECK_THROWS_WITH_AS(parser.add_argument("pos").required(true), "'required' is an invalid argument for positionals", argparse::option_error);
CHECK_THROWS_WITH_AS(parser.add_argument("pos").required(false), "'required' is an invalid argument for positionals", argparse::option_error);
}

TEST_CASE("Adding an optional argument with required option does not result in error")
Expand Down