Scarab  v3.4.0
Project 8 C++ Utility Library
Classes | Namespaces | Macros | Typedefs | Enumerations | Functions | Variables
CLI11.hpp File Reference
#include <algorithm>
#include <cmath>
#include <deque>
#include <exception>
#include <fstream>
#include <functional>
#include <iomanip>
#include <iostream>
#include <istream>
#include <iterator>
#include <locale>
#include <map>
#include <memory>
#include <numeric>
#include <set>
#include <sstream>
#include <stdexcept>
#include <string>
#include <sys/stat.h>
#include <sys/types.h>
#include <tuple>
#include <type_traits>
#include <utility>
#include <vector>
Include dependency graph for CLI11.hpp:

Go to the source code of this file.

Classes

class  Error
 All errors derive from this one. More...
 
class  ConstructionError
 Construction errors (not in parsing) More...
 
class  IncorrectConstruction
 Thrown when an option is set to conflicting values (non-vector and multi args, for example) More...
 
class  BadNameString
 Thrown on construction of a bad name. More...
 
class  OptionAlreadyAdded
 Thrown when an option already exists. More...
 
class  ParseError
 Anything that can error in Parse. More...
 
class  Success
 This is a successful completion on parsing, supposed to exit. More...
 
class  CallForHelp
 -h or –help on command line More...
 
class  CallForAllHelp
 Usually something like –help-all on command line. More...
 
class  RuntimeError
 Does not output a diagnostic in CLI11_PARSE, but allows to return from main() with a specific error code. More...
 
class  FileError
 Thrown when parsing an INI file and it is missing. More...
 
class  ConversionError
 Thrown when conversion call back fails, such as when an int fails to coerce to a string. More...
 
class  ValidationError
 Thrown when validation of results fails. More...
 
class  RequiredError
 Thrown when a required option is missing. More...
 
class  ArgumentMismatch
 Thrown when the wrong number of arguments has been received. More...
 
class  RequiresError
 Thrown when a requires option is missing. More...
 
class  ExcludesError
 Thrown when an excludes option is present. More...
 
class  ExtrasError
 Thrown when too many positionals or options are found. More...
 
class  ConfigError
 Thrown when extra values are found in an INI file. More...
 
class  InvalidError
 Thrown when validation fails before parsing. More...
 
class  HorribleError
 
class  OptionNotFound
 Thrown when counting a non-existent option. More...
 
struct  make_void< Ts >
 A copy of std::void_t from C++17 (helper for C++11 and C++14) More...
 
struct  is_vector< T >
 Check to see if something is a vector (fail check by default) More...
 
struct  is_vector< std::vector< T, A > >
 Check to see if something is a vector (true if actually a vector) More...
 
struct  is_bool< T >
 Check to see if something is bool (fail check by default) More...
 
struct  is_bool< bool >
 Check to see if something is bool (true if actually a bool) More...
 
struct  is_shared_ptr< T >
 Check to see if something is a shared pointer. More...
 
struct  is_shared_ptr< std::shared_ptr< T > >
 Check to see if something is a shared pointer (True if really a shared pointer) More...
 
struct  is_shared_ptr< const std::shared_ptr< T > >
 Check to see if something is a shared pointer (True if really a shared pointer) More...
 
struct  is_copyable_ptr< T >
 Check to see if something is copyable pointer. More...
 
struct  IsMemberType< T >
 This can be specialized to override the type deduction for IsMember. More...
 
struct  IsMemberType< const char * >
 The main custom type needed here is const char * should be a string. More...
 
struct  element_type< T >
 
struct  element_value_type< T >
 
struct  pair_adaptor< T, _ >
 Adaptor for set-like structure: This just wraps a normal container in a few utilities that do almost nothing. More...
 
struct  pair_adaptor< T, conditional_t< false, void_t< typename T::value_type::first_type, typename T::value_type::second_type >, void > >
 
class  is_streamable< S, T >
 
struct  ConfigItem
 Holds values to load into Options. More...
 
class  Config
 This class provides a converter for configuration files. More...
 
class  ConfigINI
 This converter works with INI files. More...
 
class  Validator
 Some validators that are provided. More...
 
class  CustomValidator
 Class wrapping some of the accessors of Validator. More...
 
class  ExistingFileValidator
 Check for an existing file (returns error message if check fails) More...
 
class  ExistingDirectoryValidator
 Check for an existing directory (returns error message if check fails) More...
 
class  ExistingPathValidator
 Check for an existing path. More...
 
class  NonexistentPathValidator
 Check for an non-existing path. More...
 
class  IPV4Validator
 Validate the given string is a legal ipv4 address. More...
 
class  PositiveNumber
 Validate the argument is a number and greater than or equal to 0. More...
 
class  Number
 Validate the argument is a number and greater than or equal to 0. More...
 
class  Range
 Produce a range (factory). Min and max are inclusive. More...
 
class  Bound
 Produce a bounded range (factory). Min and max are inclusive. More...
 
struct  sfinae_true< typename >
 
struct  has_find< T, V >
 
class  IsMember
 Verify items are in a set. More...
 
class  Transformer
 Translate named items to other or a value set. More...
 
class  CheckedTransformer
 translate named items to other or a value set More...
 
class  AsNumberWithUnit
 
class  AsSizeValue
 
class  FormatterBase
 
class  FormatterLambda
 This is a specialty override for lambda functions. More...
 
class  Formatter
 
class  OptionBase< CRTP >
 
class  OptionDefaults
 
class  Option
 
class  App
 Creates a command line program, with very few defaults. More...
 
class  Option_group
 Extension of App to better manage groups of options. More...
 
struct  AppFriend
 This class is simply to allow tests access to App's protected functions. More...
 

Namespaces

 CLI
 
 CLI::enums
 
 CLI::detail
 
 CLI::FailureMessage
 

Macros

#define CLI11_VERSION_MAJOR   1
 
#define CLI11_VERSION_MINOR   8
 
#define CLI11_VERSION_PATCH   0
 
#define CLI11_VERSION   "1.8.0"
 
#define CLI11_DEPRECATED(reason)   __attribute__((deprecated(reason)))
 
#define CLI11_STD_OPTIONAL   0
 
#define CLI11_EXPERIMENTAL_OPTIONAL   0
 
#define CLI11_BOOST_OPTIONAL   0
 
#define CLI11_ERROR_DEF(parent, name)
 
#define CLI11_ERROR_SIMPLE(name)   explicit name(std::string msg) : name(#name, msg, ExitCodes::name) {}
 
#define CLI11_PARSE(app, argc, argv)
 

Typedefs

template<bool B, class T = void>
using enable_if_t = typename std::enable_if< B, T >::type
 
template<typename... Ts>
using void_t = typename make_void< Ts... >::type
 A copy of std::void_t from C++17 - same reasoning as enable_if_t, it does not hurt to redefine. More...
 
template<bool B, class T , class F >
using conditional_t = typename std::conditional< B, T, F >::type
 A copy of std::conditional_t from C++14 - same reasoning as enable_if_t, it does not hurt to redefine. More...
 
using results_t = std::vector< std::string >
 
using callback_t = std::function< bool(results_t)>
 
using Option_p = std::unique_ptr< Option >
 
using App_p = std::shared_ptr< App >
 

Enumerations

enum  ExitCodes {
  Success = 0, IncorrectConstruction = 100, BadNameString, OptionAlreadyAdded,
  FileError, ConversionError, ValidationError, RequiredError,
  RequiresError, ExcludesError, ExtrasError, ConfigError,
  InvalidError, HorribleError, OptionNotFound, ArgumentMismatch,
  BaseClass = 127
}
 
enum  enabler
 Simple empty scoped class. More...
 
enum  AppFormatMode { Normal, All, Sub }
 
enum  MultiOptionPolicy : char { Throw, TakeLast, TakeFirst, Join }
 
enum  Classifier {
  NONE, POSITIONAL_MARK, SHORT, LONG,
  WINDOWS, SUBCOMMAND, SUBCOMMAND_TERMINATOR
}
 

Functions

template<typename T , typename = typename std::enable_if<std::is_enum<T>::value>::type>
std::ostream & operator<< (std::ostream &in, const T &item)
 output streaming for enumerations More...
 
template<typename T , typename = typename std::enable_if<std::is_enum<T>::value>::type>
std::istream & operator>> (std::istream &in, T &item)
 input streaming for enumerations More...
 
std::vector< std::string > split (const std::string &s, char delim)
 Split a string by a delim. More...
 
template<typename T >
std::string as_string (const T &v)
 simple utility to convert various types to a string More...
 
template<typename T , typename = typename std::enable_if<std::is_constructible<std::string, T>::value>::type>
auto as_string (T &&v) -> decltype(std::forward< T >(v))
 
template<typename T >
std::string join (const T &v, std::string delim=",")
 Simple function to join a string. More...
 
template<typename T , typename Callable , typename = typename std::enable_if<!std::is_constructible<std::string, Callable>::value>::type>
std::string join (const T &v, Callable func, std::string delim=",")
 Simple function to join a string from processed elements. More...
 
template<typename T >
std::string rjoin (const T &v, std::string delim=",")
 Join a string in reverse order. More...
 
std::string & ltrim (std::string &str)
 Trim whitespace from left of string. More...
 
std::string & ltrim (std::string &str, const std::string &filter)
 Trim anything from left of string. More...
 
std::string & rtrim (std::string &str)
 Trim whitespace from right of string. More...
 
std::string & rtrim (std::string &str, const std::string &filter)
 Trim anything from right of string. More...
 
std::string & trim (std::string &str)
 Trim whitespace from string. More...
 
std::string & trim (std::string &str, const std::string filter)
 Trim anything from string. More...
 
std::string trim_copy (const std::string &str)
 Make a copy of the string and then trim it. More...
 
std::string trim_copy (const std::string &str, const std::string &filter)
 Make a copy of the string and then trim it, any filter string can be used (any char in string is filtered) More...
 
std::ostream & format_help (std::ostream &out, std::string name, std::string description, size_t wid)
 Print a two part "help" string. More...
 
template<typename T >
bool valid_first_char (T c)
 Verify the first character of an option. More...
 
template<typename T >
bool valid_later_char (T c)
 Verify following characters of an option. More...
 
bool valid_name_string (const std::string &str)
 Verify an option name. More...
 
bool isalpha (const std::string &str)
 Verify that str consists of letters only. More...
 
std::string to_lower (std::string str)
 Return a lower case version of a string. More...
 
std::string remove_underscore (std::string str)
 remove underscores from a string More...
 
std::string find_and_replace (std::string str, std::string from, std::string to)
 Find and replace a substring with another substring. More...
 
bool has_default_flag_values (const std::string &flags)
 check if the flag definitions has possible false flags More...
 
void remove_default_flag_values (std::string &flags)
 
std::ptrdiff_t find_member (std::string name, const std::vector< std::string > names, bool ignore_case=false, bool ignore_underscore=false)
 Check if a string is a member of a list of strings and optionally ignore case or ignore underscores. More...
 
template<typename Callable >
std::string find_and_modify (std::string str, std::string trigger, Callable modify)
 
std::vector< std::string > split_up (std::string str)
 
std::string fix_newlines (std::string leader, std::string input)
 
size_t escape_detect (std::string &str, size_t offset)
 
std::string & add_quotes_if_needed (std::string &str)
 Add quotes if the string contains spaces. More...
 
template<typename T , enable_if_t< std::is_constructible< std::string, T >::value, detail::enabler > = detail::dummy>
auto to_string (T &&value) -> decltype(std::forward< T >(value))
 Convert an object to a string (directly forward if this can become a string) More...
 
template<typename T , enable_if_t<!std::is_constructible< std::string, T >::value &&is_streamable< std::stringstream, T >::value, detail::enabler > = detail::dummy>
std::string to_string (T &&value)
 Convert an object to a string (streaming must be supported for that type) More...
 
template<typename T , enable_if_t< std::is_integral< T >::value &&std::is_signed< T >::value, detail::enabler > = detail::dummy>
constexpr const char * type_name ()
 This one should not be used, since vector types print the internal type. More...
 
int64_t to_flag_value (std::string val)
 Convert a flag into an integer value typically binary flags. More...
 
template<typename T , enable_if_t< std::is_integral< T >::value &&std::is_signed< T >::value &&!is_bool< T >::value &&!std::is_enum< T >::value, detail::enabler > = detail::dummy>
bool lexical_cast (std::string input, T &output)
 Signed integers. More...
 
template<typename T , enable_if_t< std::is_integral< T >::value &&std::is_unsigned< T >::value, detail::enabler > = detail::dummy>
void sum_flag_vector (const std::vector< std::string > &flags, T &output)
 
bool split_short (const std::string &current, std::string &name, std::string &rest)
 
bool split_long (const std::string &current, std::string &name, std::string &value)
 
bool split_windows_style (const std::string &current, std::string &name, std::string &value)
 
std::vector< std::string > split_names (std::string current)
 
std::vector< std::pair< std::string, std::string > > get_default_flag_values (const std::string &str)
 extract default flag values either {def} or starting with a ! More...
 
std::tuple< std::vector< std::string >, std::vector< std::string >, std::string > get_names (const std::vector< std::string > &input)
 Get a vector of short names, one of long names, and a single name. More...
 
std::string ini_join (std::vector< std::string > args)
 Comma separated join, adds quotes if needed. More...
 
template<typename T , enable_if_t< is_copyable_ptr< typename std::remove_reference< T >::type >::value, detail::enabler > = detail::dummy>
auto smart_deref (T value) -> decltype(*value)
 
template<typename T , enable_if_t<!is_copyable_ptr< typename std::remove_reference< T >::type >::value, detail::enabler > = detail::dummy>
std::remove_reference< T >::type & smart_deref (T &value)
 
template<typename T >
std::string generate_set (const T &set)
 Generate a string representation of a set. More...
 
template<typename T >
std::string generate_map (const T &map, bool key_only=false)
 Generate a string representation of a map. More...
 
template<typename T , typename V >
static auto test_find (int) -> sfinae_true< decltype(std::declval< T >().find(std::declval< V >()))>
 
template<typename , typename V >
static auto test_find (long) -> std::false_type
 
template<typename T , typename V , enable_if_t<!has_find< T, V >::value, detail::enabler > = detail::dummy>
auto search (const T &set, const V &val) -> std::pair< bool, decltype(std::begin(detail::smart_deref(set)))>
 A search function. More...
 
template<typename T , typename V >
auto search (const T &set, const V &val, const std::function< V(V)> &filter_function) -> std::pair< bool, decltype(std::begin(detail::smart_deref(set)))>
 A search function with a filter function. More...
 
template<typename T >
std::enable_if< std::is_integral< T >::value, bool >::type checked_multiply (T &a, T b)
 Performs a *= b; if it doesn't cause integer overflow. Returns false otherwise. More...
 
template<typename T >
std::enable_if< std::is_floating_point< T >::value, bool >::type checked_multiply (T &a, T b)
 Performs a *= b; if it doesn't equal infinity. Returns false otherwise. More...
 
std::pair< std::string, std::string > split_program_name (std::string commandline)
 
std::string simple (const App *app, const Error &e)
 Printout a clean, simple message on error (the default in CLI11 1.5+) More...
 
std::string help (const App *app, const Error &e)
 Printout the full help string on error (if this fn is set, the old default for CLI11) More...
 
void TriggerOn (App *trigger_app, App *app_to_enable)
 Helper function to enable one option group/subcommand when another is used. More...
 
void TriggerOn (App *trigger_app, std::vector< App *> apps_to_enable)
 Helper function to enable one option group/subcommand when another is used. More...
 
void TriggerOff (App *trigger_app, App *app_to_enable)
 Helper function to disable one option group/subcommand when another is used. More...
 
void TriggerOff (App *trigger_app, std::vector< App *> apps_to_enable)
 Helper function to disable one option group/subcommand when another is used. More...
 

Variables

constexpr enabler dummy = {}
 An instance to use in EnableIf. More...
 
template<typename T >
using TransformPairs = std::vector< std::pair< std::string, T > >
 definition of the default transformation object More...
 
const detail::ExistingFileValidator ExistingFile
 Check for existing file (returns error message if check fails) More...
 
const detail::ExistingDirectoryValidator ExistingDirectory
 Check for an existing directory (returns error message if check fails) More...
 
const detail::ExistingPathValidator ExistingPath
 Check for an existing path. More...
 
const detail::NonexistentPathValidator NonexistentPath
 Check for an non-existing path. More...
 
const detail::IPV4Validator ValidIPV4
 Check for an IP4 address. More...
 
const detail::PositiveNumber PositiveNumber
 Check for a positive number. More...
 
const detail::Number Number
 Check for a number. More...
 
std::string ignore_case (std::string item)
 Helper function to allow ignore_case to be passed to IsMember or Transform. More...
 
std::string ignore_underscore (std::string item)
 Helper function to allow ignore_underscore to be passed to IsMember or Transform. More...
 
std::string ignore_space (std::string item)
 Helper function to allow checks to ignore spaces to be passed to IsMember or Transform. More...
 

Macro Definition Documentation

◆ CLI11_BOOST_OPTIONAL

#define CLI11_BOOST_OPTIONAL   0

Definition at line 140 of file CLI11.hpp.

◆ CLI11_DEPRECATED

#define CLI11_DEPRECATED (   reason)    __attribute__((deprecated(reason)))

Definition at line 111 of file CLI11.hpp.

◆ CLI11_ERROR_DEF

#define CLI11_ERROR_DEF (   parent,
  name 
)
Value:
protected: \
name(std::string ename, std::string msg, int exit_code) : parent(std::move(ename), std::move(msg), exit_code) {} \
name(std::string ename, std::string msg, ExitCodes exit_code) \
: parent(std::move(ename), std::move(msg), exit_code) {} \
\
public: \
name(std::string msg, ExitCodes exit_code) : parent(#name, std::move(msg), exit_code) {} \
name(std::string msg, int exit_code) : parent(#name, std::move(msg), exit_code) {}
STL namespace.
ExitCodes
Definition: CLI11.hpp:607

Definition at line 591 of file CLI11.hpp.

◆ CLI11_ERROR_SIMPLE

#define CLI11_ERROR_SIMPLE (   name)    explicit name(std::string msg) : name(#name, msg, ExitCodes::name) {}

Definition at line 602 of file CLI11.hpp.

◆ CLI11_EXPERIMENTAL_OPTIONAL

#define CLI11_EXPERIMENTAL_OPTIONAL   0

Definition at line 136 of file CLI11.hpp.

◆ CLI11_PARSE

#define CLI11_PARSE (   app,
  argc,
  argv 
)
Value:
try { \
(app).parse((argc), (argv)); \
} catch(const CLI::ParseError &e) { \
return (app).exit(e); \
}
CLI::App app
Definition: application.hh:22
auto parse(const std::basic_string< CharT, Traits, Alloc > &format, Parsable &tp) -> decltype(from_stream(std::declval< std::basic_istream< CharT, Traits > &>(), format.c_str(), tp), parse_manip< Parsable, CharT, Traits, Alloc >
Definition: date.h:7239
Anything that can error in Parse.
Definition: CLI11.hpp:716

Definition at line 3669 of file CLI11.hpp.

◆ CLI11_STD_OPTIONAL

#define CLI11_STD_OPTIONAL   0

Definition at line 131 of file CLI11.hpp.

◆ CLI11_VERSION

#define CLI11_VERSION   "1.8.0"

Definition at line 73 of file CLI11.hpp.

◆ CLI11_VERSION_MAJOR

#define CLI11_VERSION_MAJOR   1

Definition at line 70 of file CLI11.hpp.

◆ CLI11_VERSION_MINOR

#define CLI11_VERSION_MINOR   8

Definition at line 71 of file CLI11.hpp.

◆ CLI11_VERSION_PATCH

#define CLI11_VERSION_PATCH   0

Definition at line 72 of file CLI11.hpp.