pax_global_header00006660000000000000000000000064131121524510014505gustar00rootroot0000000000000052 comment=4c8c86180cfafb1448f583ed0973da8c2f559dd6 argagg-0.4.6/000077500000000000000000000000001311215245100127445ustar00rootroot00000000000000argagg-0.4.6/.gitignore000066400000000000000000000000061311215245100147300ustar00rootroot00000000000000build argagg-0.4.6/.travis.yml000066400000000000000000000007321311215245100150570ustar00rootroot00000000000000language: cpp dist: trusty install: - sudo apt-get install lcov - gem install coveralls-lcov script: - mkdir build - cd build - cmake .. -DCMAKE_BUILD_TYPE=DEBUG -DCMAKE_CXX_FLAGS="-fprofile-arcs -ftest-coverage" - cmake --build . - ctest -V after_success: - lcov -d . -c -o coverage.info - lcov -r coverage.info "/usr*" "$(readlink -f ../test)/*" -o coverage.info - lcov -l coverage.info - coveralls-lcov --repo-token ${COVERALLS_TOKEN} coverage.info argagg-0.4.6/CHANGELOG000066400000000000000000000124111311215245100141550ustar00rootroot000000000000000.4.6 ----- - Added use of argagg::fmt_ostream in gengetopt_main1 example - Merged pull request #12 - replace static_cast w/ non-zero comparison to avoid compiler warnings on MSVC - Typo fixes 0.4.5 ----- - Fixed bug in integer and float argument conversion specializations where invalid conversions were not being correctly handled. Invalid conversions (like "garbage" to float) will now throw an exception. Note though if the as(default) overload is used (with a default value specified) then all exceptions in the conversion result in the default being returned. - Changed base exception type for argagg exceptions from std::argument_error to std::runtime_error - Now compiles with -Wpedantic 0.4.4 ----- - Added some minor error handling to argagg::fmt_string() 0.4.3 ----- - Added argagg::fmt_string() to format a string using the fmt program when compiling on a __unix__ platform. Degrades to an identity function when not on a __unix__ platform. - Added argagg::fmt_ostream as a convenience stream that will stream the formatted string to the referenced final std::ostream when the argagg::fmt_ostream destructs - Fixed bug when compiling with clang where the non-template implicit bool operator was being selected when implicitly converting to an integer. By making the implicit bool operator a specialization of the templated implicit conversion operator the compiler should now select the correct overload. 0.4.2 ----- - Fixed missing inline specifiers on argagg::convert::arg specializations, fixes multiple definitions bug 0.4.1 ----- - Fixed compiler errors when using clang with regards to some initialization list usage for empty containers and a false positive -Wreturn-stack-address treated as an error 0.4.0 ----- - Changed argagg::definition::help and argagg::definition::flags to use std::string instead of const char* - Fixed compilation error with clang 0.3.1 ----- - Updated documentation - Added greedy processing examples and tests 0.3.0 ----- - Added support for POSIX command line option behaviors - Options (short) start with a hyphen (-) and long options start with two hyphens (--) - Multiple short options can be grouped following a single hyphen - -a -b -c can also be written -abc or -bac, etc. - Option names are alpha numeric but long options may include hyphens - -v is valid, --ftest-coverage is valid - -# is not valid, --bad$option is not valid - Short options can be provided arguments with or without whitespace delimiters - -I /usr/local/include and -I/usr/local/include are equally valid - Long options can be provided arguments with whitespace or equal sign delimiters - --output test.txt and --output=test.txt are equivalent - Options and positional arguments can be interleaved - -- can be specified to treat all following arguments as positional arguments (i.e. not options) - Added option definition validation - Checks for malformed flags - Checks for duplicate flags - Added conversion functions for rest of fundamental integer types - Built in conversion functions now utilize strtol(), strtoll(), strtof(), and strtod() - Added char** argv overload of argagg::parser::parse() - Removed argagg::optional, options now either receive arguments or they don't - Added example derived from gengetopt documentation - Expanded unit test coverage to 98% - Added coveralls integration for code coverage reports 0.2.2 ----- - Actually tried compiled introduction example code - Fixed bugs in the intro example code - Added it to test cases - More detailed comments in the joinargs example - Separated documentation from devel subpackage into doc subpackage in RPM spec 0.2.1 ----- - Minor documentation fix, listed incorrect exception 0.2.0 ----- - Redesigned API, removed multiple flag args - Redesigned naming scheme, options instead of flags. Struct names are now clearer, realized the "flags" were actually options - argagg::flag is now argagg::option_result - argagg::flags is now argagg::option_results - argagg::result is now argagg::parser_results - Renamed args field to pos - argagg::flag_spec is now argagg::definition - Flags can now only have zero, one, or an optional argument - Moved argagg::flag_spec::optional to argagg::optional - Added argagg::option_results which represents multiple flag parse results for the parent argagg:definition - Added implicit boolean conversion for argagg::option_results which represents whether or not the parent argagg::definition was found at all - Added implicit boolean conversion for argagg::option_result which represents whether or not that single flag has an argument - Added implicit type conversions for argagg::flag using the same argagg::convert::arg() system - Updated tests and examples accordingly - Renamed argagg_joinargs make target to just joinargs - Removed old Doxygen style.css - Added option_lacks_argument_error exception class - Added associated flag to exception error messages 0.1.3 ----- - Fixed file specification for empty parent package 0.1.2 ----- - Fixed documentation installation under RPM building - Added missing build dependencies from RPM specfile 0.1.1 ----- - Removed gcc color output flag - Fixed grammar in documentation - Updated include guard definition name 0.1.0 ----- - Initial version argagg-0.4.6/CMakeLists.txt000066400000000000000000000126501311215245100155100ustar00rootroot00000000000000cmake_minimum_required( VERSION 2.8 ) project( argagg CXX ) option( ARGAGG_BUILD_EXAMPLES "build examples" ON ) option( ARGAGG_BUILD_TESTS "build tests" ON ) option( ARGAGG_BUILD_DOCS "build docs" ON ) set( ARGAGG_TEST_COMPILE_FLAGS "-g -Wall -Wextra -Wpedantic -Werror -std=c++11" CACHE STRING "Compiler flags for all project targets" ) # When RPM packages are built CMake is invoked with a -DINCLUDE_INSTALL_DIR # that we should respect. If it isn't present then we default it to "include". set( INCLUDE_INSTALL_DIR "include" CACHE STRING "Include install folder name (default: include)" ) # When RPM packages are built CMake is invoked with a -DLIB_INSTALL_DIR that we # should respect. This is important because this is how the RPM build process # specifies installation into "lib64" instead of "lib". If it isn't present # then we default it to "lib". set( LIB_INSTALL_DIR "lib" CACHE STRING "Library install folder name (default: lib)" ) # When RPM packages are built CMake is invoked with a -DSHARE_INSTALL_PREFIX # that we should respect. This is particularly important because this is how # the RPM build process specifies installation of shared data files into # "/usr/share". If it isn't present then we default it to "share" relative to # the CMAKE_INSTALL_PREFIX which is incidentally the same path when the install # prefix is "/usr". set( SHARE_INSTALL_PREFIX share CACHE STRING "Shared data install folder name (default: share)" ) # Set up a target to install the program which amounts to copying the single # header file. install( DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/include" DESTINATION "${INCLUDE_INSTALL_DIR}/.." ) # Build examples if configured to. if( ARGAGG_BUILD_EXAMPLES ) add_executable( joinargs "examples/joinargs.cpp" ) set_target_properties( joinargs PROPERTIES COMPILE_FLAGS "${ARGAGG_TEST_COMPILE_FLAGS}" INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/include" RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin" ) add_executable( gengetopt_main1 "examples/gengetopt_main1.cpp" ) set_target_properties( gengetopt_main1 PROPERTIES COMPILE_FLAGS "${ARGAGG_TEST_COMPILE_FLAGS}" INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/include" RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin" OUTPUT_NAME sample1 ) endif() # Build and register the unit tests if configured to. if( ARGAGG_BUILD_TESTS ) enable_testing() add_executable( argagg_test "test/test.cpp" ) set_target_properties( argagg_test PROPERTIES COMPILE_FLAGS "${ARGAGG_TEST_COMPILE_FLAGS}" RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin" ) add_test( NAME argagg_test COMMAND argagg_test WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/bin" ) endif() # Build Doxygen documentation if we can find Doxygen and we're configured to # build documentation. find_program( DOXYGEN doxygen ) if( ARGAGG_BUILD_DOCS AND DOXYGEN ) # Everyone loves documentation! Lets set up a target to generate documentation. # First lets collect everything that we think can change the documentation. # This basically means everything inside the "docs" folder along with every # header and source file. If one of those changes then we want to mark the # documentation for regeneration. file( GLOB_RECURSE DOC_INPUTS "${CMAKE_CURRENT_SOURCE_DIR}/doc/*" "${CMAKE_CURRENT_SOURCE_DIR}/include/*" "${CMAKE_CURRENT_SOURCE_DIR}/test/*" ) # Like the version.hpp header file we're going to replace some CMake variables # in the doxygen configuration with actual values. configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/doc/doxygen.cfg.in ${CMAKE_BINARY_DIR}/doxygen.cfg @ONLY ) # Now we add a command for CMake to run to generate documentation. add_custom_command( # We tell CMake that this command will generate the `html` and `xml` # folders inside the project's documentation share folder inside the build # folder. Specifying these outputs explicitly adds them to the "clean" # target. Note that we put the documentation into the "share" folder in the # build folder. This is to structure the build folder as a prefix. OUTPUT "${CMAKE_BINARY_DIR}/share/doc/${PROJECT_NAME}/html" "${CMAKE_BINARY_DIR}/share/doc/${PROJECT_NAME}/xml" # This command makes sure that the output folder exists first. COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_BINARY_DIR}/share/doc/${PROJECT_NAME}" # This command performs the doxygen documentation generation. COMMAND ${DOXYGEN} doxygen.cfg # Run the above commands in the build folder. WORKING_DIRECTORY "${CMAKE_BINARY_DIR}" # Tell CMake that if any of the documentation input files we collected change # then this command needs to be re-run. DEPENDS ${CMAKE_BINARY_DIR}/doxygen.cfg ${DOC_INPUTS} ) # This creates an "empty target" named "docs" that doesn't produce output, but # depends on the generated documentation. The result is we can run "make docs" # and it behaves the way we expect. It also doesn't regenerate documentation if # the outputs specified below are up-to-date. add_custom_target( docs ALL DEPENDS "${CMAKE_BINARY_DIR}/share/doc/${PROJECT_NAME}/html" "${CMAKE_BINARY_DIR}/share/doc/${PROJECT_NAME}/xml" ) # Finally set up an installation target for the documentation. install( DIRECTORY "${CMAKE_BINARY_DIR}/share/" DESTINATION "${SHARE_INSTALL_PREFIX}" ) endif() argagg-0.4.6/LICENSE000066400000000000000000000020431311215245100137500ustar00rootroot00000000000000Copyright (c) 2017 Viet The Nguyen Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. argagg-0.4.6/README.md000066400000000000000000000246141311215245100142320ustar00rootroot00000000000000Argument Aggregator =================== | Branch | Build | Coverage | | --- | --- | --- | | `master` | [![Build Status](https://api.travis-ci.org/vietjtnguyen/argagg.svg?branch=master)](https://travis-ci.org/vietjtnguyen/argagg) | [![Coverage Status](https://coveralls.io/repos/github/vietjtnguyen/argagg/badge.svg?branch=master)](https://coveralls.io/github/vietjtnguyen/argagg?branch=master) | | `dev` | [![Build Status](https://api.travis-ci.org/vietjtnguyen/argagg.svg?branch=dev)](https://travis-ci.org/vietjtnguyen/argagg/branches) | [![Coverage Status](https://coveralls.io/repos/github/vietjtnguyen/argagg/badge.svg?branch=dev)](https://coveralls.io/github/vietjtnguyen/argagg?branch=dev) | This is yet another C++ command line argument/option parser. It was written as a simple and idiomatic alternative to other frameworks like [getopt][], [Boost program options][], [TCLAP][], and others. The goal is to achieve the majority of argument parsing needs in a simple manner with an easy to use API. It operates as a single pass over all arguments, recognizing flags prefixed by `-` (short) or `--` (long) and aggregating them into easy to access structures with lots of convenience functions. It defers processing types until you access them, so the result structures end up just being pointers into the original command line argument C-strings. `argagg` supports [POSIX recommended argument syntax conventions](https://www.gnu.org/software/libc/manual/html_node/Argument-Syntax.html): - Options (short) start with a hyphen (`-`) and long options start with two hyphens (`--`) - Multiple short options can be grouped following a single hyphen - `-a -b -c` can also be written `-abc` or `-bac`, etc. - Option names are alpha numeric but long options may include hyphens - `-v` is valid, `--ftest-coverage` is valid - `-#` is not valid, `--bad$option` is not valid - Short options can be provided arguments with or without whitespace delimiters - `-I /usr/local/include` and `-I/usr/local/include` are equally valid - Long options can be provided arguments with whitespace or equal sign delimiters - `--output test.txt` and `--output=test.txt` are equivalent - Options and positional arguments can be interleaved - `--` can be specified to treat all following arguments as positional arguments (i.e. not options) Help message formatting is provided via the `fmt` utility on {Li,U}nix systems. [getopt]: https://www.gnu.org/software/libc/manual/html_node/Getopt.html#Getopt [Boost program options]: http://www.boost.org/doc/libs/release/libs/program_options/ [TCLAP]: http://tclap.sourceforge.net/ Introduction ------------ To use just create an `argagg::parser` object. The struct doesn't provide any explicit methods for defining options. Instead we define the options using [initialization lists][]. [initialization lists]: http://en.cppreference.com/w/cpp/language/list_initialization ```cpp argagg::parser argparser {{ { "help", {"-h", "--help"}, "shows this help message", 0}, { "delim", {"-d", "--delim"}, "delimiter (default: ,)", 1}, { "num", {"-n", "--num"}, "number", 1}, }}; ``` An option is specified by four things: the name of the option, the strings that activate the option (flags), the option's help message, and the number of arguments the option expects. With the parser defined you actually parse the arguments by calling the `argagg::parser::parse()` method. If there are any problems an exception is thrown. ```cpp argagg::parser_results args; try { args = argparser.parse(argc, argv); } catch (const std::exception& e) { std::cerr << e.what() << std::endl; return EXIT_FAILURE; } ``` You can check if an option shows up in the command line arguments by accessing the option by name from the parser results and using the implicit boolean conversion. You can write out a simplistic option help message by streaming the `argagg::parser` instance itself. ```cpp if (args["help"]) { std::cerr << argparser; // -h, --help // shows this help message // -d, --delim // delimiter (default: ,) // -n, --num // number return EXIT_SUCCESS; } ``` That help message is only for the flags. If you want a usage message it's up to you to provide it. ```cpp if (args["help"]) { std::cerr << "Usage: program [options] ARG1 ARG2" << std::endl << argparser; // Usage: program [options] ARG1 ARG2 // -h, --help // shows this help message // -d, --delim // delimiter (default: ,) // -n, --num // number return EXIT_SUCCESS; } ``` A special output stream, `argagg::fmt_ostream`, is provided that will run the usage and help through `fmt` for nice word wrapping (see [`./examples/joinargs.cpp`](./examples/joinargs.cpp) for a better example). ```cpp if (args["help"]) { argagg::fmt_ostream fmt(std::cerr); fmt << "Usage: program [options] ARG1 ARG2" << std::endl << argparser; return EXIT_SUCCESS; } ``` Generally `argagg` tries to do a minimal amount of work to leave most of the control with the user. If you want to get an option argument but fallback on a default value if it doesn't exist then you can use the `argagg::option_results::as()` API and provide a default value. ```cpp auto delim = args["delim"].as(","); ``` If you don't mind being implicit an implicit conversion operator is provided allowing you to write simple assignments. ```cpp int x = 0; if (args["num"]) { x = args["num"]; } ``` Finally, you can get all of the positional arguments as an `std::vector` using the `argagg::parser_results::pos` member. You can alternatively convert individual positional arguments using the same conversion functions as the option argument conversion methods. auto y = 0.0; if (args.pos.size() > 0) { y = args.as(0); } One can also specify `--` on the command line in order to treat all following arguments as not options. For a more detailed treatment take a look at the [examples](./examples) or [test cases](./test/test.cpp). Mental Model ------------ The parser just returns a structure of pointers to the C-strings in the original `argv` array. The `parse()` method returns a `parser_results` object which has two things: position arguments and option results. The position arguments are just a `std::vector` of `const char*`. The option results are a mapping from option name (`std::string`) to `option_results` objects. The `option_results` objects are just an `std::vector` of `option_result` objects. Each instance of an `option_result` represents the option showing up on the command line. If there was an argument associated with it then the `option_result`'s `arg` member will *not* be `nullptr`. Consider the following command: ```sh gcc -g -I/usr/local/include -I. -o test main.o foo.o -L/usr/local/lib -lz bar.o -lpng ``` This would produce a structure like follows, written in psuedo-YAML, where each string is actually a `const char*` pointing to some part of a string in the original `argv` array: ```yaml parser_results: program: "gcc" pos: ["main.o", "foo.o", "bar.o"] options: version: debug: all: - arg: null include_path: all: - arg: "/usr/local/include" - arg: "." library_path: all: - arg: "/usr/local/lib" library: all: - arg: "z" - arg: "png" output: all: - arg: "test" ``` Conversion to types occurs at the very end when the `as()` API is used. Up to that point `argagg` is just dealing with C-strings. API Reference ------------- Doxygen documentation can be found [here](https://vietjtnguyen.github.io/argagg/latest/). Quick Reference --------------- ## Structs - `option_result` - `const char* arg` - `option_results` - `std::vector all` - `parser_results` - `const char* program` - `std::unordered_map options` - `std::vector pos` - `definition` - `const char* name` - `std::vector flag` - `std::string help` - `unsigned int num_args` - `parser_map` - `std::array short_map` - `std::unordered_map long_map` - `parser` - `std::vector definitions` ## Exceptions - `unexpected_argument_error` - `unexpected_option_error` - `option_lacks_argument_error` - `invalid_flag` Installation ------------ There is just a single header file ([`argagg.hpp`](./include/argagg/argagg.hpp)) so you can copy that whereever you want. If you want to properly install it you can use the CMake script. The CMake script exists primarily to build the tests and documentation, but an install target for the header is provided. The standard installation dance using CMake and `make` is as follows: ```sh mkdir build cd build cmake -DCMAKE_INSTALL_PREFIX=/usr/local .. make install ctest -V # optionally run tests ``` Override [`CMAKE_INSTALL_PREFIX`](https://cmake.org/cmake/help/v2.8.12/cmake.html#variable:CMAKE_INSTALL_PREFIX) to change the installation location. By default (on UNIX variants) it will install to `/usr/local` resulting in the header being copied to `/usr/local/include/argagg/argagg.hpp`. If you have [Doxygen](http://www.stack.nl/~dimitri/doxygen/) it should build and install documentation as well. There are no dependencies other than the standard library. Edge Cases ---------- There are some interesting edge cases that show up in option parsing. I used the behavior of `gcc` as my target reference in these cases. ### Greedy Arguments Remember that options that require arguments will greedily process arguments. Say we have the following options: `-a`, `-b`, `-c`, and `-o`. They all don't accept arguments except `-o`. Below is a list of permutations for short flag grouping and the results: - `-abco foo`: `-o`'s argument is `foo` - `-aboc foo`: `-o`'s argument is `c`, `foo` is a positional argument - `-aobc foo`: `-o`'s argument is `bc`, `foo` is a positional argument - `-oabc foo`: `-o`'s argument is `abc`, `foo` is a positional argument For whitespace delimited arguments the greedy processing means the next argument element (in `argv`) will be treated as an argument for the previous option, regardless of whether or not it looks like a flag or some other special entry. That means you get behavior like below: - `--output=foo -- --bar`: `--output`'s argument is `foo`, `--bar` is a positional argument - `--output -- --bar`: `--output`'s argument is `--`, `--bar` is treated as a flag - `--output --bar`: `--output`'s argument is `--bar` argagg-0.4.6/doc/000077500000000000000000000000001311215245100135115ustar00rootroot00000000000000argagg-0.4.6/doc/.gitignore000066400000000000000000000000301311215245100154720ustar00rootroot00000000000000_build doxygen gh-pages argagg-0.4.6/doc/cppreference-doxygen-web.tag.xml000066400000000000000000041445541311215245100217150ustar00rootroot00000000000000 std std::is_function T atomic_fetch_and_explicit cpp/atomic/atomic_fetch_sub (T... args) T atomic_fetch_xor_explicit cpp/atomic/atomic_fetch_xor (T... args) T set_unexpected cpp/error/set_unexpected (T... args) std::input_iterator_tag std::logical_and std::is_integral std::money_get T fputs cpp/io/c/fputs (T... args) std::basic_ofstream std::ratio_subtract T modf cpp/numeric/math/modf (T... args) std::size_t T not2 cpp/utility/functional/not2 (T... args) T strlen cpp/string/byte/strlen (T... args) T exp2 cpp/numeric/math/exp2 (T... args) std::ctype_byname std::wcout T setiosflags cpp/io/manip/setiosflags (T... args) T adjacent_difference cpp/algorithm/adjacent_difference (T... args) T cos cpp/numeric/math/cos (T... args) T fwscanf cpp/io/c/fwscanf (T... args) T atomic_init cpp/atomic/atomic_init (T... args) std::fstream std::valarray std::ratio_greater_equal T forward_as_tuple cpp/utility/tuple/forward_as_tuple (T... args) std::remove_extent std::ratio_greater T abort cpp/utility/program/abort (T... args) T wcsncmp cpp/string/wide/wcsncmp (T... args) std::intptr_t std::regex_iterator T set_intersection cpp/algorithm/set_intersection (T... args) std::lock_guard std::wbuffer_convert std::modulus std::ratio_divide T atomic_signal_fence cpp/atomic/atomic_signal_fence (T... args) T llabs cpp/numeric/math/abs (T... args) T make_move_iterator cpp/iterator/make_move_iterator (T... args) std::ostreambuf_iterator std::dynarray std::is_nothrow_move_constructible std::vector T scanf cpp/io/c/fscanf (T... args) std::match_results std::back_insert_iterator T nextafter cpp/numeric/math/nextafter (T... args) std::iterator std::int8_t T stol cpp/string/basic_string/stol (T... args) T strcspn cpp/string/byte/strcspn (T... args) T ungetwc cpp/io/c/ungetwc (T... args) T transform cpp/algorithm/transform (T... args) std::student_t_distribution std::mt19937_64 std::runtime_error T putc cpp/io/c/fputc (T... args) T iswdigit cpp/string/wide/iswdigit (T... args) std::ranlux24_base T rint cpp/numeric/math/rint (T... args) std::allocator_traits T memset cpp/string/byte/memset (T... args) T isgraph cpp/string/byte/isgraph (T... args) std::codecvt std::ratio_less_equal T replace_copy_if cpp/algorithm/replace_copy (T... args) T scalbn cpp/numeric/math/scalbn (T... args) std::condition_variable_any T partial_sort_copy cpp/algorithm/partial_sort_copy (T... args) std::deca std::extreme_value_distribution std::cout std::decay std::is_trivially_move_assignable std::adopt_lock_t T make_exception_ptr cpp/error/make_exception_ptr (T... args) std::wcerr T frexp cpp/numeric/math/frexp (T... args) std::lognormal_distribution T isxdigit cpp/string/byte/isxdigit (T... args) std::wclog T atomic_exchange_explicit cpp/atomic/atomic_exchange (T... args) T wprintf cpp/io/c/fwprintf (T... args) std::char_traits std::remove_reference T fdim cpp/numeric/math/fdim (T... args) std::num_get T wctype cpp/string/wide/wctype (T... args) std::is_pointer T mbrtoc32 cpp/string/multibyte/mbrtoc32 (T... args) T setw cpp/io/manip/setw (T... args) T get_temporary_buffer cpp/memory/get_temporary_buffer (T... args) T fmax cpp/numeric/math/fmax (T... args) std::multiset T atomic_thread_fence cpp/atomic/atomic_thread_fence (T... args) T atomic_exchange cpp/atomic/atomic_exchange (T... args) std::weak_ptr std::bidirectional_iterator_tag std::wstring_convert T fgetwc cpp/io/c/fgetwc (T... args) T swprintf cpp/io/c/fwprintf (T... args) T prev_permutation cpp/algorithm/prev_permutation (T... args) std::greater_equal std::is_trivially_constructible T max_element cpp/algorithm/max_element (T... args) std::string std::discrete_distribution std::wostream std::is_polymorphic T set_symmetric_difference cpp/algorithm/set_symmetric_difference (T... args) T wcscpy cpp/string/wide/wcscpy (T... args) T const_pointer_cast cpp/memory/shared_ptr/pointer_cast (T... args) T minmax_element cpp/algorithm/minmax_element (T... args) T wcstok cpp/string/wide/wcstok (T... args) T ref cpp/utility/functional/ref (T... args) std::reverse_iterator T feupdateenv cpp/numeric/fenv/feupdateenv (T... args) std::bad_array_new_length T endl cpp/io/manip/endl (T... args) T end cpp/iterator/end (T... args) std::condition_variable T wmemmove cpp/string/wide/wmemmove (T... args) T fmin cpp/numeric/math/fmin (T... args) T uninitialized_fill_n cpp/memory/uninitialized_fill_n (T... args) std::ranlux48 T nouppercase cpp/io/manip/uppercase (T... args) T noshowpos cpp/io/manip/showpos (T... args) T ctime cpp/chrono/c/ctime (T... args) T wmemset cpp/string/wide/wmemset (T... args) std::unexpected_handler T iswpunct cpp/string/wide/iswpunct (T... args) std::piecewise_constant_distribution std::codecvt_base std::set T pop_heap cpp/algorithm/pop_heap (T... args) T sprintf cpp/io/c/fprintf (T... args) T fixed cpp/io/manip/fixed (T... args) T make_shared cpp/memory/shared_ptr/make_shared (T... args) std::forward_iterator_tag std::codecvt_byname std::pointer_safety std::uint_least64_t std::placeholders std::nothrow_t std::is_nothrow_copy_assignable std::is_same T make_heap cpp/algorithm/make_heap (T... args) T fmod cpp/numeric/math/fmod (T... args) std::unique_lock std::basic_ostringstream T atol cpp/string/byte/atoi (T... args) std::is_error_code_enum std::time_put_byname T uninitialized_copy cpp/memory/uninitialized_copy (T... args) std::time_get T dynamic_pointer_cast cpp/memory/shared_ptr/pointer_cast (T... args) T set_union cpp/algorithm/set_union (T... args) std::regex std::cin T hexfloat cpp/io/manip/fixed (T... args) T vswprintf cpp/io/c/vfwprintf (T... args) T asctime cpp/chrono/c/asctime (T... args) std::unordered_map T iswspace cpp/string/wide/iswspace (T... args) std::initializer_list T nan cpp/numeric/math/nan (T... args) T sort cpp/algorithm/sort (T... args) T quick_exit cpp/utility/program/quick_exit (T... args) std::is_const T log10 cpp/numeric/math/log10 (T... args) std::basic_regex T mbstowcs cpp/string/multibyte/mbstowcs (T... args) T isspace cpp/string/byte/isspace (T... args) std::poisson_distribution std::bad_typeid T strncat cpp/string/byte/strncat (T... args) std::less_equal T isinf cpp/numeric/math/isinf (T... args) T atof cpp/string/byte/atof (T... args) std::sig_atomic_t T erf cpp/numeric/math/erf (T... args) T is_sorted_until cpp/algorithm/is_sorted_until (T... args) T cbrt cpp/numeric/math/cbrt (T... args) T log1p cpp/numeric/math/log1p (T... args) T return_temporary_buffer cpp/memory/return_temporary_buffer (T... args) T mbsrtowcs cpp/string/multibyte/mbsrtowcs (T... args) T feraiseexcept cpp/numeric/fenv/feraiseexcept (T... args) T fseek cpp/io/c/fseek (T... args) std::make_unsigned std::basic_filebuf T atomic_fetch_or_explicit cpp/atomic/atomic_fetch_or (T... args) std::logical_or T log cpp/numeric/math/log (T... args) T putchar cpp/io/c/putchar (T... args) T make_tuple cpp/utility/tuple/make_tuple (T... args) T expm1 cpp/numeric/math/expm1 (T... args) std::wstringbuf T fma cpp/numeric/math/fma (T... args) std::kilo std::bernoulli_distribution T remove_copy_if cpp/algorithm/remove_copy (T... args) T showpoint cpp/io/manip/showpoint (T... args) std::int16_t T fscanf cpp/io/c/fscanf (T... args) T stable_partition cpp/algorithm/stable_partition (T... args) std::basic_ios std::int32_t T fill_n cpp/algorithm/fill_n (T... args) std::is_rvalue_reference T remove_copy cpp/algorithm/remove_copy (T... args) T atomic_compare_exchange_strong_explicit cpp/atomic/atomic_compare_exchange (T... args) std::integral_constant std::wsmatch T wctomb cpp/string/multibyte/wctomb (T... args) T fgets cpp/io/c/fgets (T... args) T remainder cpp/numeric/math/remainder (T... args) std::cerr std::codecvt_utf8 T allocate_shared cpp/memory/shared_ptr/allocate_shared (T... args) std::ratio_add T unique cpp/algorithm/unique (T... args) std::is_trivially_move_constructible T includes cpp/algorithm/includes (T... args) T iswalnum cpp/string/wide/iswalnum (T... args) std::wcsub_match T exit cpp/utility/program/exit (T... args) T put_time cpp/io/manip/put_time (T... args) T to_string cpp/string/basic_string/to_string (T... args) T is_heap_until cpp/algorithm/is_heap_until (T... args) std::is_member_pointer T wcstold cpp/string/wide/wcstof (T... args) std::wstreampos std::uint_least16_t T stold cpp/string/basic_string/stof (T... args) T ftell cpp/io/c/ftell (T... args) std::tuple T copy_backward cpp/algorithm/copy_backward (T... args) T wcstoll cpp/string/wide/wcstol (T... args) T perror cpp/io/c/perror (T... args) T vwscanf cpp/io/c/vfwscanf (T... args) T stable_sort cpp/algorithm/stable_sort (T... args) std::make_signed T generic_category cpp/error/generic_category (T... args) T abs(int) cpp/numeric/math/abs (T... args) T fgetws cpp/io/c/fgetws (T... args) std::logic_error std::sregex_iterator T showpos cpp/io/manip/showpos (T... args) std::int_least64_t T exp cpp/numeric/math/exp (T... args) std::binary_negate T fill cpp/algorithm/fill (T... args) T isalpha cpp/string/byte/isalpha (T... args) std::discard_block_engine std::is_trivially_assignable std::add_cv T lgamma cpp/numeric/math/lgamma (T... args) std::pico std::iterator_traits std::is_trivially_default_constructible T feclearexcept cpp/numeric/fenv/feclearexcept (T... args) T wcsncpy cpp/string/wide/wcsncpy (T... args) T undeclare_reachable cpp/memory/gc/undeclare_reachable (T... args) std::shared_ptr T oct cpp/io/manip/hex (T... args) std::bad_alloc std::ostringstream std::basic_fstream std::stringbuf std::exponential_distribution std::uint32_t T strspn cpp/string/byte/strspn (T... args) std::wcregex_iterator std::bad_function_call T realloc cpp/memory/c/realloc (T... args) T copy cpp/algorithm/copy (T... args) T binary_search cpp/algorithm/binary_search (T... args) T system_category cpp/error/system_category (T... args) T mbrtowc cpp/string/multibyte/mbrtowc (T... args) std::false_type T strtof cpp/string/byte/strtof (T... args) T mem_fn cpp/utility/functional/mem_fn (T... args) std::wregex T distance cpp/iterator/distance (T... args) T lock cpp/thread/lock (T... args) T strcmp cpp/string/byte/strcmp (T... args) T tmpfile cpp/io/c/tmpfile (T... args) T hypot cpp/numeric/math/hypot (T... args) T getenv cpp/utility/program/getenv (T... args) T strrchr cpp/string/byte/strrchr (T... args) T count cpp/algorithm/count (T... args) std::uint_least8_t T tan cpp/numeric/math/tan (T... args) T strftime cpp/chrono/c/strftime (T... args) std::uniform_real_distribution T stod cpp/string/basic_string/stof (T... args) T towupper cpp/string/wide/towupper (T... args) std::smatch std::cregex_token_iterator std::range_error std::is_assignable T atoll cpp/string/byte/atoi (T... args) std::is_copy_assignable std::invalid_argument T atomic_store cpp/atomic/atomic_store (T... args) std::is_unsigned std::jmp_buf std::is_class std::geometric_distribution T stoi cpp/string/basic_string/stol (T... args) T rethrow_exception cpp/error/rethrow_exception (T... args) std::uint_fast8_t T sin cpp/numeric/math/sin (T... args) T atomic_fetch_sub_explicit cpp/atomic/atomic_fetch_sub (T... args) T unexpected cpp/error/unexpected (T... args) T mbtowc cpp/string/multibyte/mbtowc (T... args) std::mersenne_twister_engine T get_time cpp/io/manip/get_time (T... args) T partition cpp/algorithm/partition (T... args) T next cpp/iterator/next (T... args) std::is_arithmetic std::negate std::try_to_lock_t std::wfilebuf std::is_compound std::iostream std::is_object T isfinite cpp/numeric/math/isfinite (T... args) T boolalpha cpp/io/manip/boolalpha (T... args) T fetestexcept cpp/numeric/fenv/fetestexcept (T... args) T mbrlen cpp/string/multibyte/mbrlen (T... args) std::recursive_mutex std::is_copy_constructible T iswgraph cpp/string/wide/iswgraph (T... args) std::codecvt_utf8_utf16 std::not_equal_to std::is_destructible std::int_fast32_t T time cpp/chrono/c/time (T... args) T atomic_compare_exchange_strong cpp/atomic/atomic_compare_exchange (T... args) std::rank T wcschr cpp/string/wide/wcschr (T... args) T uppercase cpp/io/manip/uppercase (T... args) std::milli std::deci T lower_bound cpp/algorithm/lower_bound (T... args) std::add_lvalue_reference std::is_bind_expression std::ios_base T copy_if cpp/algorithm/copy (T... args) std::ratio_less std::int64_t std::nullptr_t T isnan cpp/numeric/math/isnan (T... args) T has_facet cpp/locale/has_facet (T... args) T kill_dependency cpp/atomic/kill_dependency (T... args) T uninitialized_copy_n cpp/memory/uninitialized_copy_n (T... args) std::stack T feholdexcept cpp/numeric/fenv/feholdexcept (T... args) T div cpp/numeric/math/div (T... args) T at_quick_exit cpp/utility/program/at_quick_exit (T... args) std::uint_fast64_t std::is_reference std::ratio std::shared_future std::u16streampos T wcspbrk cpp/string/wide/wcspbrk (T... args) T search cpp/algorithm/search (T... args) std::wistream std::aligned_storage T find_first_of cpp/algorithm/find_first_of (T... args) T iota cpp/algorithm/iota (T... args) std::wstreambuf T declare_reachable cpp/memory/gc/declare_reachable (T... args) T atomic_compare_exchange_weak cpp/atomic/atomic_compare_exchange (T... args) std::binary_function T strtod cpp/string/byte/strtof (T... args) T accumulate cpp/algorithm/accumulate (T... args) T wcsrchr cpp/string/wide/wcsrchr (T... args) std::out_of_range T min_element cpp/algorithm/min_element (T... args) std::independent_bits_engine T clearerr cpp/io/c/clearerr (T... args) T random_shuffle cpp/algorithm/random_shuffle (T... args) std::stringstream std::tera T iswalpha cpp/string/wide/iswalpha (T... args) std::recursive_timed_mutex std::nano T atomic_fetch_and cpp/atomic/atomic_fetch_sub (T... args) T wmemchr cpp/string/wide/wmemchr (T... args) std::unordered_multimap std::normal_distribution T bsearch cpp/algorithm/bsearch (T... args) T ilogb cpp/numeric/math/ilogb (T... args) std::minstd_rand std::is_signed T unique_copy cpp/algorithm/unique_copy (T... args) T _Exit cpp/utility/program/_Exit (T... args) T move cpp/utility/move (T... args) T find_end cpp/algorithm/find_end (T... args) std::is_move_constructible std::unique_ptr T fesetexceptflag cpp/numeric/fenv/feexceptflag (T... args) std::is_nothrow_copy_constructible std::forward_list std::errc std::lconv T nth_element cpp/algorithm/nth_element (T... args) T gets cpp/io/c/gets (T... args) T lexicographical_compare cpp/algorithm/lexicographical_compare (T... args) T nearbyint cpp/numeric/math/nearbyint (T... args) std::strstreambuf std::locale std::equal_to T memcpy cpp/string/byte/memcpy (T... args) T fwrite cpp/io/c/fwrite (T... args) std::divides std::collate_byname T unitbuf cpp/io/manip/unitbuf (T... args) T iswlower cpp/string/wide/iswlower (T... args) T mblen cpp/string/multibyte/mblen (T... args) T swscanf cpp/io/c/fwscanf (T... args) T wcstoimax cpp/string/wide/wcstoimax (T... args) std::domain_error T fprintf cpp/io/c/fprintf (T... args) T find_if cpp/algorithm/find (T... args) std::is_empty T strtoimax cpp/string/byte/strtoimax (T... args) T isalnum cpp/string/byte/isalnum (T... args) T atomic_fetch_add_explicit cpp/atomic/atomic_fetch_add (T... args) std::is_nothrow_default_constructible std::ratio_equal T push_heap cpp/algorithm/push_heap (T... args) T min cpp/algorithm/min (T... args) T fwprintf cpp/io/c/fwprintf (T... args) std::ostream std::streamsize T uncaught_exception cpp/error/uncaught_exception (T... args) std::shared_lock T strtoll cpp/string/byte/strtol (T... args) std::uint8_t T throw_with_nested cpp/error/throw_with_nested (T... args) T shuffle cpp/algorithm/random_shuffle (T... args) T isprint cpp/string/byte/isprint (T... args) T get_new_handler cpp/memory/new/get_new_handler (T... args) T call_once cpp/thread/call_once (T... args) T trunc cpp/numeric/math/trunc (T... args) T wcscspn cpp/string/wide/wcscspn (T... args) std::enable_shared_from_this std::ptrdiff_t T mbrtoc16 cpp/string/multibyte/mbrtoc16 (T... args) std::int_fast8_t std::aligned_union T lround cpp/numeric/math/round (T... args) std::future std::wcmatch std::overflow_error std::centi T pow cpp/numeric/math/pow (T... args) std::wssub_match std::is_nothrow_move_assignable std::pair T tgamma cpp/numeric/math/tgamma (T... args) T erfc cpp/numeric/math/erfc (T... args) T llround cpp/numeric/math/round (T... args) T abs(float) cpp/numeric/math/fabs (T... args) T asinh cpp/numeric/math/asinh (T... args) T feof cpp/io/c/feof (T... args) std::wsregex_token_iterator std::weibull_distribution T noskipws cpp/io/manip/skipws (T... args) std::less std::multiplies T find cpp/algorithm/find (T... args) T atoi cpp/string/byte/atoi (T... args) std::is_enum T not1 cpp/utility/functional/not1 (T... args) T vfscanf cpp/io/c/vfscanf (T... args) std::unary_function T stof cpp/string/basic_string/stof (T... args) T regex_search cpp/regex/regex_search (T... args) std::error_code std::yocto std::streampos std::istream_iterator T rotate_copy cpp/algorithm/rotate_copy (T... args) T set_new_handler cpp/memory/new/set_new_handler (T... args) T undeclare_no_pointers cpp/memory/gc/undeclare_no_pointers (T... args) std::wifstream T async cpp/thread/async (T... args) T partition_point cpp/algorithm/partition_point (T... args) std::moneypunct_byname T vsscanf cpp/io/c/vfscanf (T... args) std::terminate_handler std::ctype_base std::reference_wrapper T fesetround cpp/numeric/fenv/feround (T... args) T atomic_is_lock_free cpp/atomic/atomic_is_lock_free (T... args) std::ranlux48_base T tanh cpp/numeric/math/tanh (T... args) std::bit_not std::int_fast16_t T ldiv cpp/numeric/math/div (T... args) T setbase cpp/io/manip/setbase (T... args) T remove cpp/algorithm/remove (T... args) T strtol cpp/string/byte/strtol (T... args) T strpbrk cpp/string/byte/strpbrk (T... args) std::error_category std::regex_traits T signbit cpp/numeric/math/signbit (T... args) T wcsncat cpp/string/wide/wcsncat (T... args) T get_money cpp/io/manip/get_money (T... args) std::regex_constants T set_difference cpp/algorithm/set_difference (T... args) std::negative_binomial_distribution T cref cpp/utility/functional/ref (T... args) std::is_union T getline cpp/string/basic_string/getline (T... args) std::mt19937 std::enable_if T to_wstring cpp/string/basic_string/to_wstring (T... args) std::chi_squared_distribution std::add_rvalue_reference T system cpp/utility/program/system (T... args) T static_pointer_cast cpp/memory/shared_ptr/pointer_cast (T... args) std::basic_istream std::ostream_iterator T wcstoumax cpp/string/wide/wcstoimax (T... args) T memmove cpp/string/byte/memmove (T... args) T getwchar cpp/io/c/getwchar (T... args) T scientific cpp/io/manip/fixed (T... args) T wcsftime cpp/chrono/c/wcsftime (T... args) T begin cpp/iterator/begin (T... args) T ceil cpp/numeric/math/ceil (T... args) T sinh cpp/numeric/math/sinh (T... args) T is_permutation cpp/algorithm/is_permutation (T... args) std::is_trivially_copy_assignable T generate_n cpp/algorithm/generate_n (T... args) T acosh cpp/numeric/math/acosh (T... args) std::clog std::is_scalar T advance cpp/iterator/advance (T... args) std::uses_allocator std::piecewise_linear_distribution std::hash T flush cpp/io/manip/flush (T... args) std::shuffle_order_engine std::chrono std::greater std::csub_match std::uintmax_t T atomic_fetch_xor cpp/atomic/atomic_fetch_xor (T... args) std::remove_pointer std::numeric_limits T ws cpp/io/manip/ws (T... args) std::add_volatile std::once_flag std::is_literal_type std::money_base T signal cpp/utility/program/signal (T... args) T noshowbase cpp/io/manip/showbase (T... args) std::peta std::is_placeholder T generate cpp/algorithm/generate (T... args) T ldexp cpp/numeric/math/ldexp (T... args) std::add_const std::basic_stringbuf std::tm std::is_abstract std::deque T vsnprintf cpp/io/c/vfprintf (T... args) std::allocator T remove_if cpp/algorithm/remove (T... args) std::scoped_allocator_adaptor std::ssub_match T stoull cpp/string/basic_string/stoul (T... args) std::messages_byname T fegetexceptflag cpp/numeric/fenv/feexceptflag (T... args) T find_if_not cpp/algorithm/find (T... args) std::promise T merge cpp/algorithm/merge (T... args) T free cpp/memory/c/free (T... args) T count_if cpp/algorithm/count (T... args) T clock cpp/chrono/c/clock (T... args) T mktime cpp/chrono/c/mktime (T... args) std::add_pointer std::uintptr_t T inserter cpp/iterator/inserter (T... args) T puts cpp/io/c/puts (T... args) std::bit_and T asin cpp/numeric/math/asin (T... args) std::uniform_int_distribution std::type_info T iscntrl cpp/string/byte/iscntrl (T... args) T difftime cpp/chrono/c/difftime (T... args) T terminate cpp/error/terminate (T... args) T memcmp cpp/string/byte/memcmp (T... args) std::fisher_f_distribution T uninitialized_fill cpp/memory/uninitialized_fill (T... args) std::strstream T hex cpp/io/manip/hex (T... args) T tie cpp/utility/tuple/tie (T... args) T back_inserter cpp/iterator/back_inserter (T... args) T upper_bound cpp/algorithm/upper_bound (T... args) std::time_get_byname std::basic_streambuf T adjacent_find cpp/algorithm/adjacent_find (T... args) std::is_nothrow_constructible T use_facet cpp/locale/use_facet (T... args) std::queue std::is_base_of std::intmax_t std::ranlux24 T vfwprintf cpp/io/c/vfwprintf (T... args) T atomic_fetch_add cpp/atomic/atomic_fetch_add (T... args) std::remove_cv T fsetpos cpp/io/c/fsetpos (T... args) T malloc cpp/memory/c/malloc (T... args) T localtime cpp/chrono/c/localtime (T... args) std::is_trivially_destructible std::wcin T wcscmp cpp/string/wide/wcscmp (T... args) T c32rtomb cpp/string/multibyte/c32rtomb (T... args) T isupper cpp/string/byte/isupper (T... args) std::atomic std::basic_stringstream T wcstod cpp/string/wide/wcstof (T... args) T tolower cpp/string/byte/tolower (T... args) std::is_void T sort_heap cpp/algorithm/sort_heap (T... args) std::plus T isdigit cpp/string/byte/isdigit (T... args) std::bitset T wcslen cpp/string/wide/wcslen (T... args) T wmemcmp cpp/string/wide/wmemcmp (T... args) std::FILE T move_if_noexcept cpp/utility/move_if_noexcept (T... args) T declval cpp/utility/declval (T... args) T fpclassify cpp/numeric/math/fpclassify (T... args) T iswupper cpp/string/wide/iswupper (T... args) std::thread std::future_error std::time_base std::alignment_of std::time_put std::bit_or T rand cpp/numeric/random/rand (T... args) T atomic_compare_exchange_weak_explicit cpp/atomic/atomic_compare_exchange (T... args) std::pointer_traits T partial_sort cpp/algorithm/partial_sort (T... args) std::basic_string T llrint cpp/numeric/math/rint (T... args) std::priority_queue T fclose cpp/io/c/fclose (T... args) T reverse cpp/algorithm/reverse (T... args) std::exa T partial_sum cpp/algorithm/partial_sum (T... args) std::wostringstream T showbase cpp/io/manip/showbase (T... args) std::is_default_constructible std::cregex_iterator T vswscanf cpp/io/c/vfwscanf (T... args) std::wstring T atan cpp/numeric/math/atan (T... args) T atanh cpp/numeric/math/atanh (T... args) std::remove_all_extents T iter_swap cpp/algorithm/iter_swap (T... args) T scalbln cpp/numeric/math/scalbn (T... args) std::istrstream T reverse_copy cpp/algorithm/reverse_copy (T... args) std::unary_negate std::unordered_multiset std::basic_ostream std::wsregex_iterator std::uint_fast16_t std::is_nothrow_assignable T forward cpp/utility/forward (T... args) std::moneypunct T getc cpp/io/c/fgetc (T... args) std::type_index T equal_range cpp/algorithm/equal_range (T... args) T atomic_fetch_sub cpp/atomic/atomic_fetch_sub (T... args) T is_partitioned cpp/algorithm/is_partitioned (T... args) T next_permutation cpp/algorithm/next_permutation (T... args) T isblank cpp/string/byte/isblank (T... args) T noshowpoint cpp/io/manip/showpoint (T... args) T atan2 cpp/numeric/math/atan2 (T... args) T nanf cpp/numeric/math/nan (T... args) T towctrans cpp/string/wide/towctrans (T... args) std::is_standard_layout std::timed_mutex T right cpp/io/manip/left (T... args) T fputwc cpp/io/c/fputwc (T... args) T strtoul cpp/string/byte/strtoul (T... args) T is_heap cpp/algorithm/is_heap (T... args) std::bad_exception T fflush cpp/io/c/fflush (T... args) T strtoumax cpp/string/byte/strtoimax (T... args) T nexttoward cpp/numeric/math/nextafter (T... args) std::int_fast64_t std::function T nounitbuf cpp/io/manip/unitbuf (T... args) std::bad_cast std::error_condition std::filebuf std::int_least16_t T ispunct cpp/string/byte/ispunct (T... args) std::istreambuf_iterator std::u16string T noboolalpha cpp/io/manip/boolalpha (T... args) T make_pair cpp/utility/pair/make_pair (T... args) std::is_error_condition_enum std::is_nothrow_destructible std::wiostream T iswctype cpp/string/wide/iswctype (T... args) std::allocator_arg_t T srand cpp/numeric/random/srand (T... args) std::rel_ops std::uint_least32_t std::collate T replace_copy cpp/algorithm/replace_copy (T... args) T future_category cpp/thread/future/future_category (T... args) std::remove_const T resetiosflags cpp/io/manip/resetiosflags (T... args) T vprintf cpp/io/c/vfprintf (T... args) std::u32string std::uint_fast32_t T gmtime cpp/chrono/c/gmtime (T... args) std::is_lvalue_reference T align cpp/memory/align (T... args) T tuple_cat cpp/utility/tuple/tuple_cat (T... args) T ends cpp/io/manip/ends (T... args) T set_terminate cpp/error/set_terminate (T... args) T lrint cpp/numeric/math/rint (T... args) std::complex std::ofstream std::insert_iterator std::bad_array_length T none_of cpp/algorithm/all_any_none_of (T... args) std::this_thread T wscanf cpp/io/c/fwscanf (T... args) T fputc cpp/io/c/fputc (T... args) T dec cpp/io/manip/hex (T... args) T strcat cpp/string/byte/strcat (T... args) std::is_trivially_copyable std::basic_istringstream std::basic_ifstream std::list T raise cpp/utility/program/raise (T... args) std::minus T wcsspn cpp/string/wide/wcsspn (T... args) T fabs cpp/numeric/math/fabs (T... args) T wmemcpy cpp/string/wide/wmemcpy (T... args) T copy_n cpp/algorithm/copy_n (T... args) std::map std::linear_congruential_engine T rethrow_if_nested cpp/error/rethrow_if_nested (T... args) T setlocale cpp/locale/setlocale (T... args) std::codecvt_utf16 T addressof cpp/memory/addressof (T... args) T calloc cpp/memory/c/calloc (T... args) std::cmatch T strerror cpp/string/byte/strerror (T... args) std::defer_lock_t T strcpy cpp/string/byte/strcpy (T... args) std::exception T wcstoull cpp/string/wide/wcstoul (T... args) T c16rtomb cpp/string/multibyte/c16rtomb (T... args) std::front_insert_iterator T generate_canonical cpp/numeric/random/generate_canonical (T... args) T vfprintf cpp/io/c/vfprintf (T... args) T notify_all_at_thread_exit cpp/thread/notify_all_at_thread_exit (T... args) T rotate cpp/algorithm/rotate (T... args) T current_exception cpp/error/current_exception (T... args) T strtok cpp/string/byte/strtok (T... args) T wcscat cpp/string/wide/wcscat (T... args) T strncpy cpp/string/byte/strncpy (T... args) T towlower cpp/string/wide/towlower (T... args) T floor cpp/numeric/math/floor (T... args) std::zetta T left cpp/io/manip/left (T... args) T ferror cpp/io/c/ferror (T... args) std::streambuf T atomic_load_explicit cpp/atomic/atomic_load (T... args) std::experimental std::num_put T swap cpp/algorithm/swap (T... args) T acos cpp/numeric/math/acos (T... args) std::owner_less T wcscoll cpp/string/wide/wcscoll (T... args) T sqrt cpp/numeric/math/sqrt (T... args) std::extent T mbsinit cpp/string/multibyte/mbsinit (T... args) std::bad_optional_access T qsort cpp/algorithm/qsort (T... args) T stoll cpp/string/basic_string/stol (T... args) T put_money cpp/io/manip/put_money (T... args) T wcstoul cpp/string/wide/wcstoul (T... args) T wcstol cpp/string/wide/wcstol (T... args) T atexit cpp/utility/program/atexit (T... args) T atomic_fetch_or cpp/atomic/atomic_fetch_or (T... args) T rewind cpp/io/c/rewind (T... args) T wcsxfrm cpp/string/wide/wcsxfrm (T... args) std::yotta std::wcregex_token_iterator T round cpp/numeric/math/round (T... args) std::uint64_t std::messages T vwprintf cpp/io/c/vfwprintf (T... args) T all_of cpp/algorithm/all_any_none_of (T... args) std::regex_token_iterator T replace cpp/algorithm/replace (T... args) std::move_iterator T remquo cpp/numeric/math/remquo (T... args) T setbuf cpp/io/c/setbuf (T... args) std::messages_base T strncmp cpp/string/byte/strncmp (T... args) T localeconv cpp/locale/localeconv (T... args) T wctrans cpp/string/wide/wctrans (T... args) std::istringstream std::giga T any_of cpp/algorithm/all_any_none_of (T... args) std::integer_sequence T equal cpp/algorithm/equal (T... args) T max cpp/algorithm/max (T... args) T strxfrm cpp/string/byte/strxfrm (T... args) std::has_virtual_destructor std::max_align_t std::remove_volatile std::underlying_type T iswxdigit cpp/string/wide/iswxdigit (T... args) T labs cpp/numeric/math/abs (T... args) std::hecto T regex_match cpp/regex/regex_match (T... args) std::is_member_object_pointer std::exception_ptr T fputws cpp/io/c/fputws (T... args) T wcrtomb cpp/string/multibyte/wcrtomb (T... args) T setprecision cpp/io/manip/setprecision (T... args) T setvbuf cpp/io/c/setvbuf (T... args) std::nested_exception std::random_access_iterator_tag T regex_replace cpp/regex/regex_replace (T... args) std::ctype T freopen cpp/io/c/freopen (T... args) T logb cpp/numeric/math/logb (T... args) std::time_t T wctob cpp/string/multibyte/wctob (T... args) std::knuth_b T atomic_load cpp/atomic/atomic_load (T... args) T search_n cpp/algorithm/search_n (T... args) T toupper cpp/string/byte/toupper (T... args) std::auto_ptr T move_backward cpp/algorithm/move_backward (T... args) T is_sorted cpp/algorithm/is_sorted (T... args) std::minstd_rand0 T strtoull cpp/string/byte/strtoul (T... args) std::sregex_token_iterator std::logical_not std::fpos_t T iswblank cpp/string/wide/iswblank (T... args) std::istream std::seed_seq std::default_delete std::femto std::clock_t std::true_type T get_pointer_safety cpp/memory/gc/get_pointer_safety (T... args) std::mbstate_t T get_unexpected cpp/error/get_unexpected (T... args) T sscanf cpp/io/c/fscanf (T... args) std::ostrstream std::gamma_distribution std::bad_weak_ptr std::output_iterator_tag std::micro std::is_trivial T fesetenv cpp/numeric/fenv/feenv (T... args) T atomic_store_explicit cpp/atomic/atomic_store (T... args) T strtold cpp/string/byte/strtof (T... args) T fread cpp/io/c/fread (T... args) std::packaged_task std::unordered_set std::is_volatile T memchr cpp/string/byte/memchr (T... args) T btowc cpp/string/multibyte/btowc (T... args) std::wfstream T replace_if cpp/algorithm/replace (T... args) std::multimap T strcoll cpp/string/byte/strcoll (T... args) T vsprintf cpp/io/c/vfprintf (T... args) T mismatch cpp/algorithm/mismatch (T... args) T getchar cpp/io/c/getchar (T... args) std::atomic_flag T islower cpp/string/byte/islower (T... args) T tmpnam cpp/io/c/tmpnam (T... args) std::numpunct_byname T nanl cpp/numeric/math/nan (T... args) std::binomial_distribution T fopen cpp/io/c/fopen (T... args) std::basic_iostream std::wofstream std::fpos std::underflow_error T for_each cpp/algorithm/for_each (T... args) T fegetround cpp/numeric/fenv/feround (T... args) T ungetc cpp/io/c/ungetc (T... args) std::cauchy_distribution std::is_trivially_copy_constructible std::conditional std::is_pod T internal cpp/io/manip/left (T... args) T vfwscanf cpp/io/c/vfwscanf (T... args) std::int_least8_t T fgetc cpp/io/c/fgetc (T... args) std::streamoff std::is_move_assignable std::int_least32_t T wcstof cpp/string/wide/wcstof (T... args) std::wstringstream std::subtract_with_carry_engine std::regex_error T bind cpp/utility/functional/bind (T... args) T skipws cpp/io/manip/skipws (T... args) std::is_constructible std::piecewise_construct_t T iswprint cpp/string/wide/iswprint (T... args) T wcstombs cpp/string/multibyte/wcstombs (T... args) T inplace_merge cpp/algorithm/inplace_merge (T... args) T copysign cpp/numeric/math/copysign (T... args) T putwchar cpp/io/c/putwchar (T... args) std::mutex T wcsstr cpp/string/wide/wcsstr (T... args) T fegetenv cpp/numeric/fenv/feenv (T... args) T longjmp cpp/utility/program/longjmp (T... args) T iswcntrl cpp/string/wide/iswcntrl (T... args) std::system_error T declare_no_pointers cpp/memory/gc/declare_no_pointers (T... args) T isnormal cpp/numeric/math/isnormal (T... args) T swap_ranges cpp/algorithm/swap_ranges (T... args) std::wistringstream std::is_floating_point T minmax cpp/algorithm/minmax (T... args) T defaultfloat cpp/io/manip/fixed (T... args) T rename cpp/io/c/rename (T... args) T snprintf cpp/io/c/fprintf (T... args) T try_lock cpp/thread/try_lock (T... args) std::ratio_not_equal std::ratio_multiply std::result_of std::is_fundamental T stoul cpp/string/basic_string/stoul (T... args) std::ifstream std::u32streampos T fgetpos cpp/io/c/fgetpos (T... args) std::length_error T partition_copy cpp/algorithm/partition_copy (T... args) T vscanf cpp/io/c/vfscanf (T... args) T front_inserter cpp/iterator/front_inserter (T... args) std::sub_match std::common_type T get_terminate cpp/error/get_terminate (T... args) T cosh cpp/numeric/math/cosh (T... args) std::shared_timed_mutex std::array std::random_device std::default_random_engine std::raw_storage_iterator std::is_convertible T prev cpp/iterator/prev (T... args) std::uint16_t T strchr cpp/string/byte/strchr (T... args) std::is_array T strstr cpp/string/byte/strstr (T... args) std::mega T printf cpp/io/c/fprintf (T... args) std::numpunct std::money_put std::new_handler std::is_member_function_pointer T setfill cpp/io/manip/setfill (T... args) T inner_product cpp/algorithm/inner_product (T... args) std::is_function cpp/types/is_function std::input_iterator_tag cpp/iterator/iterator_tags std::logical_and cpp/utility/functional/logical_and T operator() cpp/utility/functional/logical_and (T... args) std::is_integral cpp/types/is_integral std::money_get cpp/locale/money_get T do_get cpp/locale/money_get/get (T... args) std::money_get::char_type std::money_get::pattern T get cpp/locale/money_get/get (T... args) T ~money_get cpp/locale/money_get/~money_get (T... args) std::money_get::string_type std::money_get::iter_type T money_get cpp/locale/money_get/money_get (T... args) std::money_get::char_type cpp/locale/money_get std::money_get::pattern cpp/locale/money_base std::money_get::string_type cpp/locale/money_get std::money_get::iter_type cpp/locale/money_get std::basic_ofstream cpp/io/basic_ofstream T seekp cpp/io/basic_ostream/seekp (T... args) T setstate cpp/io/basic_ios/setstate (T... args) T getloc cpp/io/ios_base/getloc (T... args) T precision cpp/io/ios_base/precision (T... args) T flags cpp/io/ios_base/flags (T... args) T widen cpp/io/basic_ios/widen (T... args) T basic_ofstream cpp/io/basic_ofstream/basic_ofstream (T... args) T fill cpp/io/basic_ios/fill (T... args) T setf cpp/io/ios_base/setf (T... args) std::basic_ofstream::event_callback T open cpp/io/basic_ofstream/open (T... args) T good cpp/io/basic_ios/good (T... args) T copyfmt cpp/io/basic_ios/copyfmt (T... args) T tellp cpp/io/basic_ostream/tellp (T... args) T sync_with_stdio cpp/io/ios_base/sync_with_stdio (T... args) T xalloc cpp/io/ios_base/xalloc (T... args) T exceptions cpp/io/basic_ios/exceptions (T... args) T iword cpp/io/ios_base/iword (T... args) T operator<< cpp/io/basic_ostream/operator_ltlt (T... args) T narrow cpp/io/basic_ios/narrow (T... args) T operator bool cpp/io/basic_ios/operator_bool (T... args) T operator! cpp/io/basic_ios/operator! (T... args) T close cpp/io/basic_ofstream/close (T... args) T write cpp/io/basic_ostream/write (T... args) T unsetf cpp/io/ios_base/unsetf (T... args) T width cpp/io/ios_base/width (T... args) T rdstate cpp/io/basic_ios/rdstate (T... args) T tie cpp/io/basic_ios/tie (T... args) std::basic_ofstream::failure T move cpp/io/basic_ios/move (T... args) T eof cpp/io/basic_ios/eof (T... args) T register_callback cpp/io/ios_base/register_callback (T... args) T pword cpp/io/ios_base/pword (T... args) T flush cpp/io/basic_ostream/flush (T... args) T set_rdbuf cpp/io/basic_ios/set_rdbuf (T... args) T fail cpp/io/basic_ios/fail (T... args) T is_open cpp/io/basic_ofstream/is_open (T... args) T operator= cpp/io/basic_ofstream/operator= (T... args) T swap cpp/io/basic_ios/swap (T... args) T rdbuf cpp/io/basic_ios/rdbuf (T... args) T imbue cpp/io/basic_ios/imbue (T... args) T bad cpp/io/basic_ios/bad (T... args) T clear cpp/io/basic_ios/clear (T... args) std::basic_ofstream::sentry T put cpp/io/basic_ostream/put (T... args) T init cpp/io/basic_ios/init (T... args) std::basic_ofstream::event_callback cpp/io/ios_base/event_callback std::basic_ofstream::failure cpp/io/ios_base/failure T failure cpp/io/ios_base/failure (T... args) T what cpp/error/exception/what (T... args) std::basic_ofstream::sentry cpp/io/basic_ostream/sentry T ~sentry cpp/io/basic_ostream/sentry (T... args) T operator bool cpp/io/basic_ostream/sentry (T... args) T sentry cpp/io/basic_ostream/sentry (T... args) std::ratio_subtract cpp/numeric/ratio/ratio_subtract std::size_t cpp/types/size_t std::ctype_byname cpp/locale/ctype_byname T ~ctype_byname cpp/locale/ctype_byname (T... args) T ctype_byname cpp/locale/ctype_byname (T... args) T do_toupper cpp/locale/ctype/toupper (T... args) T toupper cpp/locale/ctype/toupper (T... args) T do_scan_is cpp/locale/ctype/scan_is (T... args) T do_tolower cpp/locale/ctype/tolower (T... args) T do_narrow cpp/locale/ctype/narrow (T... args) T widen cpp/locale/ctype/widen (T... args) T is cpp/locale/ctype/is (T... args) T scan_is cpp/locale/ctype/scan_is (T... args) T tolower cpp/locale/ctype/tolower (T... args) T do_is cpp/locale/ctype/is (T... args) T narrow cpp/locale/ctype/narrow (T... args) std::ctype_byname::mask T do_widen cpp/locale/ctype/widen (T... args) std::ctype_byname::mask cpp/locale/ctype_base std::wcout cpp/io/basic_ostream std::fstream cpp/io/basic_fstream T seekp cpp/io/basic_ostream/seekp (T... args) T setstate cpp/io/basic_ios/setstate (T... args) T getloc cpp/io/ios_base/getloc (T... args) T precision cpp/io/ios_base/precision (T... args) T width cpp/io/ios_base/width (T... args) T flags cpp/io/ios_base/flags (T... args) T widen cpp/io/basic_ios/widen (T... args) T operator>> cpp/io/basic_istream/operator_gtgt (T... args) T fill cpp/io/basic_ios/fill (T... args) T setf cpp/io/ios_base/setf (T... args) T seekg cpp/io/basic_istream/seekg (T... args) T open cpp/io/basic_fstream/open (T... args) T good cpp/io/basic_ios/good (T... args) T copyfmt cpp/io/basic_ios/copyfmt (T... args) T tellp cpp/io/basic_ostream/tellp (T... args) T sync_with_stdio cpp/io/ios_base/sync_with_stdio (T... args) T gcount cpp/io/basic_istream/gcount (T... args) T fstream cpp/io/basic_fstream/basic_fstream (T... args) T unget cpp/io/basic_istream/unget (T... args) T xalloc cpp/io/ios_base/xalloc (T... args) T read cpp/io/basic_istream/read (T... args) T getline cpp/io/basic_istream/getline (T... args) T eof cpp/io/basic_ios/eof (T... args) T exceptions cpp/io/basic_ios/exceptions (T... args) std::fstream::sentry T register_callback cpp/io/ios_base/register_callback (T... args) T operator<< cpp/io/basic_ostream/operator_ltlt (T... args) std::fstream::event_callback T narrow cpp/io/basic_ios/narrow (T... args) T operator bool cpp/io/basic_ios/operator_bool (T... args) T write cpp/io/basic_ostream/write (T... args) T close cpp/io/basic_fstream/close (T... args) T sync cpp/io/basic_istream/sync (T... args) T putback cpp/io/basic_istream/putback (T... args) T ignore cpp/io/basic_istream/ignore (T... args) T unsetf cpp/io/ios_base/unsetf (T... args) T readsome cpp/io/basic_istream/readsome (T... args) T rdstate cpp/io/basic_ios/rdstate (T... args) T tie cpp/io/basic_ios/tie (T... args) std::fstream::failure T move cpp/io/basic_ios/move (T... args) T get cpp/io/basic_istream/get (T... args) T operator! cpp/io/basic_ios/operator! (T... args) T pword cpp/io/ios_base/pword (T... args) T swap cpp/io/basic_ios/swap (T... args) T flush cpp/io/basic_ostream/flush (T... args) T tellg cpp/io/basic_istream/tellg (T... args) T set_rdbuf cpp/io/basic_ios/set_rdbuf (T... args) T fail cpp/io/basic_ios/fail (T... args) T is_open cpp/io/basic_fstream/is_open (T... args) T peek cpp/io/basic_istream/peek (T... args) T operator= cpp/io/basic_fstream/operator= (T... args) T iword cpp/io/ios_base/iword (T... args) T rdbuf cpp/io/basic_ios/rdbuf (T... args) T imbue cpp/io/basic_ios/imbue (T... args) T bad cpp/io/basic_ios/bad (T... args) T clear cpp/io/basic_ios/clear (T... args) T put cpp/io/basic_ostream/put (T... args) T init cpp/io/basic_ios/init (T... args) std::fstream::sentry cpp/io/basic_ostream/sentry T ~sentry cpp/io/basic_istream/sentry (T... args) T operator bool cpp/io/basic_istream/sentry (T... args) T sentry cpp/io/basic_istream/sentry (T... args) std::fstream::event_callback cpp/io/ios_base/event_callback std::fstream::failure cpp/io/ios_base/failure T failure cpp/io/ios_base/failure (T... args) T what cpp/error/exception/what (T... args) std::valarray cpp/numeric/valarray std::ratio_greater_equal cpp/numeric/ratio/ratio_greater_equal std::remove_extent cpp/types/remove_extent std::ratio_greater cpp/numeric/ratio/ratio_greater std::intptr_t cpp/types/integer std::regex_iterator cpp/regex/regex_iterator T operator!= cpp/regex/regex_iterator/operator_cmp (T... args) T operator= cpp/regex/regex_iterator/operator= (T... args) T operator== cpp/regex/regex_iterator/operator_cmp (T... args) T operator-> cpp/regex/regex_iterator/operator* (T... args) T regex_iterator cpp/regex/regex_iterator/regex_iterator (T... args) T operator++ cpp/regex/regex_iterator/operator_arith (T... args) T operator* cpp/regex/regex_iterator/operator* (T... args) T operator++(int) cpp/regex/regex_iterator/operator_arith (T... args) std::lock_guard cpp/thread/lock_guard T ~lock_guard cpp/thread/lock_guard/~lock_guard (T... args) T lock_guard cpp/thread/lock_guard/lock_guard (T... args) std::wbuffer_convert cpp/locale/wbuffer_convert T state cpp/locale/wbuffer_convert/state (T... args) T wbuffer_convert cpp/locale/wbuffer_convert/wbuffer_convert (T... args) T rdbuf cpp/locale/wbuffer_convert/rdbuf (T... args) T ~wbuffer_convert cpp/locale/wbuffer_convert/~wbuffer_convert (T... args) std::modulus cpp/utility/functional/modulus T operator() cpp/utility/functional/modulus (T... args) std::ratio_divide cpp/numeric/ratio/ratio_divide std::ostreambuf_iterator cpp/iterator/ostreambuf_iterator std::dynarray cpp/container/dynarray T rbegin cpp/container/dynarray/rbegin (T... args) T crend cpp/container/dynarray/rend (T... args) T begin cpp/container/dynarray/begin (T... args) T data cpp/container/dynarray/data (T... args) T at cpp/container/dynarray/at (T... args) T back cpp/container/dynarray/back (T... args) T end cpp/container/dynarray/end (T... args) T fill cpp/container/dynarray/fill (T... args) T empty cpp/container/dynarray/empty (T... args) T size cpp/container/dynarray/size (T... args) T cend cpp/container/dynarray/end (T... args) T ~dynarray cpp/container/dynarray/~dynarray (T... args) T max_size cpp/container/dynarray/max_size (T... args) T rend cpp/container/dynarray/rend (T... args) T front cpp/container/dynarray/front (T... args) T dynarray cpp/container/dynarray/dynarray (T... args) T operator[] cpp/container/dynarray/operator_at (T... args) T crbegin cpp/container/dynarray/rbegin (T... args) T cbegin cpp/container/dynarray/begin (T... args) std::is_nothrow_move_constructible cpp/types/is_move_constructible std::vector cpp/container/vector T push_back cpp/container/vector/push_back (T... args) T crbegin cpp/container/vector/rbegin (T... args) T erase cpp/container/vector/erase (T... args) T data cpp/container/vector/data (T... args) T insert cpp/container/vector/insert (T... args) T pop_back cpp/container/vector/pop_back (T... args) T shrink_to_fit cpp/container/vector/shrink_to_fit (T... args) T back cpp/container/vector/back (T... args) T end cpp/container/vector/end (T... args) T resize cpp/container/vector/resize (T... args) T emplace_back cpp/container/vector/emplace_back (T... args) T size cpp/container/vector/size (T... args) T cbegin cpp/container/vector/begin (T... args) T front cpp/container/vector/front (T... args) T ~vector cpp/container/vector/~vector (T... args) T rbegin cpp/container/vector/rbegin (T... args) T crend cpp/container/vector/rend (T... args) T assign cpp/container/vector/assign (T... args) T operator= cpp/container/vector/operator= (T... args) T vector cpp/container/vector/vector (T... args) T reserve cpp/container/vector/reserve (T... args) T capacity cpp/container/vector/capacity (T... args) T empty cpp/container/vector/empty (T... args) T cend cpp/container/vector/end (T... args) T swap cpp/container/vector/swap (T... args) T max_size cpp/container/vector/max_size (T... args) T rend cpp/container/vector/rend (T... args) T get_allocator cpp/container/vector/get_allocator (T... args) T clear cpp/container/vector/clear (T... args) T at cpp/container/vector/at (T... args) T emplace cpp/container/vector/emplace (T... args) T operator[] cpp/container/vector/operator_at (T... args) T begin cpp/container/vector/begin (T... args) std::match_results cpp/regex/match_results T cbegin cpp/regex/match_results/begin (T... args) T format cpp/regex/match_results/format (T... args) T ~match_results cpp/regex/match_results/~match_results (T... args) T size cpp/regex/match_results/size (T... args) T swap cpp/regex/match_results/swap (T... args) T position cpp/regex/match_results/position (T... args) T prefix cpp/regex/match_results/prefix (T... args) T str cpp/regex/match_results/str (T... args) T begin cpp/regex/match_results/begin (T... args) T empty cpp/regex/match_results/empty (T... args) T suffix cpp/regex/match_results/suffix (T... args) T get_allocator cpp/regex/match_results/get_allocator (T... args) T end cpp/regex/match_results/end (T... args) T match_results cpp/regex/match_results/match_results (T... args) T ready cpp/regex/match_results/ready (T... args) T cend cpp/regex/match_results/end (T... args) T operator[] cpp/regex/match_results/operator_at (T... args) T length cpp/regex/match_results/length (T... args) T max_size cpp/regex/match_results/max_size (T... args) std::back_insert_iterator cpp/iterator/back_insert_iterator std::iterator cpp/iterator/iterator std::int8_t cpp/types/integer std::student_t_distribution cpp/numeric/random/student_t_distribution T n cpp/numeric/random/student_t_distribution/n (T... args) T reset cpp/numeric/random/student_t_distribution/reset (T... args) T max cpp/numeric/random/student_t_distribution/max (T... args) T operator() cpp/numeric/random/student_t_distribution/operator() (T... args) T student_t_distribution cpp/numeric/random/student_t_distribution/student_t_distribution (T... args) T param cpp/numeric/random/student_t_distribution/param (T... args) T min cpp/numeric/random/student_t_distribution/min (T... args) std::mt19937_64 cpp/numeric/random/mersenne_twister_engine T discard cpp/numeric/random/mersenne_twister_engine/discard (T... args) T mt19937_64 cpp/numeric/random/mersenne_twister_engine/mersenne_twister_engine (T... args) T max cpp/numeric/random/mersenne_twister_engine/max (T... args) T operator() cpp/numeric/random/mersenne_twister_engine/operator() (T... args) T seed cpp/numeric/random/mersenne_twister_engine/seed (T... args) T min cpp/numeric/random/mersenne_twister_engine/min (T... args) std::runtime_error cpp/error/runtime_error T runtime_error cpp/error/runtime_error (T... args) T what cpp/error/exception/what (T... args) std::ranlux24_base cpp/numeric/random/subtract_with_carry_engine T discard cpp/numeric/random/subtract_with_carry_engine/discard (T... args) T ranlux24_base cpp/numeric/random/subtract_with_carry_engine/subtract_with_carry_engine (T... args) T max cpp/numeric/random/subtract_with_carry_engine/max (T... args) T operator() cpp/numeric/random/subtract_with_carry_engine/operator() (T... args) T seed cpp/numeric/random/subtract_with_carry_engine/seed (T... args) T min cpp/numeric/random/subtract_with_carry_engine/min (T... args) std::allocator_traits cpp/memory/allocator_traits T destroy cpp/memory/allocator_traits/destroy (T... args) T select_on_container_copy_construction cpp/memory/allocator_traits/select_on_container_copy_construction (T... args) T max_size cpp/memory/allocator_traits/max_size (T... args) T allocate cpp/memory/allocator_traits/allocate (T... args) T deallocate cpp/memory/allocator_traits/deallocate (T... args) T construct cpp/memory/allocator_traits/construct (T... args) std::codecvt cpp/locale/codecvt std::codecvt::extern_type T out cpp/locale/codecvt/out (T... args) T do_length cpp/locale/codecvt/length (T... args) T always_noconv cpp/locale/codecvt/always_noconv (T... args) T do_encoding cpp/locale/codecvt/encoding (T... args) T do_in cpp/locale/codecvt/in (T... args) T unshift cpp/locale/codecvt/unshift (T... args) std::codecvt::state_type T max_length cpp/locale/codecvt/max_length (T... args) T encoding cpp/locale/codecvt/encoding (T... args) T codecvt cpp/locale/codecvt/codecvt (T... args) T do_unshift cpp/locale/codecvt/unshift (T... args) T do_out cpp/locale/codecvt/out (T... args) T do_max_length cpp/locale/codecvt/max_length (T... args) T do_always_noconv cpp/locale/codecvt/always_noconv (T... args) T in cpp/locale/codecvt/in (T... args) std::codecvt::intern_type T length cpp/locale/codecvt/length (T... args) T ~codecvt cpp/locale/codecvt/~codecvt (T... args) std::codecvt::extern_type cpp/locale/codecvt std::codecvt::state_type cpp/locale/codecvt std::codecvt::intern_type cpp/locale/codecvt std::ratio_less_equal cpp/numeric/ratio/ratio_less_equal std::condition_variable_any cpp/thread/condition_variable_any T condition_variable_any cpp/thread/condition_variable_any/condition_variable_any (T... args) T notify_one cpp/thread/condition_variable_any/notify_one (T... args) T wait_for cpp/thread/condition_variable_any/wait_for (T... args) T native_handle cpp/thread/condition_variable_any/native_handle (T... args) T notify_all cpp/thread/condition_variable_any/notify_all (T... args) T ~condition_variable_any cpp/thread/condition_variable_any/~condition_variable_any (T... args) T wait_until cpp/thread/condition_variable_any/wait_until (T... args) T wait cpp/thread/condition_variable_any/wait (T... args) std::deca cpp/numeric/ratio/ratio std::extreme_value_distribution cpp/numeric/random/extreme_value_distribution T max cpp/numeric/random/extreme_value_distribution/max (T... args) T b cpp/numeric/random/extreme_value_distribution/params (T... args) T a cpp/numeric/random/extreme_value_distribution/params (T... args) T operator() cpp/numeric/random/extreme_value_distribution/operator() (T... args) T extreme_value_distribution cpp/numeric/random/extreme_value_distribution/extreme_value_distribution (T... args) T param cpp/numeric/random/extreme_value_distribution/param (T... args) T min cpp/numeric/random/extreme_value_distribution/min (T... args) T reset cpp/numeric/random/extreme_value_distribution/reset (T... args) std::cout cpp/io/basic_ostream std::decay cpp/types/decay std::is_trivially_move_assignable cpp/types/is_move_assignable std::adopt_lock_t cpp/thread/lock_tag_t std::wcerr cpp/io/basic_ostream std::lognormal_distribution cpp/numeric/random/lognormal_distribution T max cpp/numeric/random/lognormal_distribution/max (T... args) T reset cpp/numeric/random/lognormal_distribution/reset (T... args) T lognormal_distribution cpp/numeric/random/lognormal_distribution/lognormal_distribution (T... args) T m cpp/numeric/random/lognormal_distribution/params (T... args) T operator() cpp/numeric/random/lognormal_distribution/operator() (T... args) T s cpp/numeric/random/lognormal_distribution/params (T... args) T param cpp/numeric/random/lognormal_distribution/param (T... args) T min cpp/numeric/random/lognormal_distribution/min (T... args) std::wclog cpp/io/basic_ostream std::char_traits cpp/string/char_traits T assign cpp/string/char_traits/assign (T... args) T not_eof cpp/string/char_traits/not_eof (T... args) T to_int_type cpp/string/char_traits/to_int_type (T... args) T to_char_type cpp/string/char_traits/to_char_type (T... args) T eq cpp/string/char_traits/cmp (T... args) T copy cpp/string/char_traits/copy (T... args) T length cpp/string/char_traits/length (T... args) T lt cpp/string/char_traits/cmp (T... args) T eof cpp/string/char_traits/eof (T... args) T find cpp/string/char_traits/find (T... args) T move cpp/string/char_traits/move (T... args) T compare cpp/string/char_traits/compare (T... args) T eq_int_type cpp/string/char_traits/eq_int_type (T... args) std::remove_reference cpp/types/remove_reference std::num_get cpp/locale/num_get T do_get cpp/locale/num_get/get (T... args) std::num_get::char_type std::num_get::iter_type T num_get cpp/locale/num_get/num_get (T... args) T ~num_get cpp/locale/num_get/~num_get (T... args) T get cpp/locale/num_get/get (T... args) std::num_get::char_type cpp/locale/num_get std::num_get::iter_type cpp/locale/num_get std::is_pointer cpp/types/is_pointer std::multiset cpp/container/multiset T begin cpp/container/multiset/begin (T... args) T erase cpp/container/multiset/erase (T... args) T insert cpp/container/multiset/insert (T... args) T swap cpp/container/multiset/swap (T... args) T end cpp/container/multiset/end (T... args) T emplace_hint cpp/container/multiset/emplace_hint (T... args) T key_comp cpp/container/multiset/key_comp (T... args) T cbegin cpp/container/multiset/begin (T... args) T count cpp/container/multiset/count (T... args) T find cpp/container/multiset/find (T... args) T crbegin cpp/container/multiset/rbegin (T... args) T multiset cpp/container/multiset/multiset (T... args) T upper_bound cpp/container/multiset/upper_bound (T... args) T rbegin cpp/container/multiset/rbegin (T... args) T crend cpp/container/multiset/rend (T... args) T size cpp/container/multiset/size (T... args) T operator= cpp/container/multiset/operator= (T... args) T ~multiset cpp/container/multiset/~multiset (T... args) T value_comp cpp/container/multiset/value_comp (T... args) T empty cpp/container/multiset/empty (T... args) T lower_bound cpp/container/multiset/lower_bound (T... args) T get_allocator cpp/container/multiset/get_allocator (T... args) T max_size cpp/container/multiset/max_size (T... args) T rend cpp/container/multiset/rend (T... args) T cend cpp/container/multiset/end (T... args) T clear cpp/container/multiset/clear (T... args) T equal_range cpp/container/multiset/equal_range (T... args) T emplace cpp/container/multiset/emplace (T... args) std::weak_ptr cpp/memory/weak_ptr T operator= cpp/memory/weak_ptr/operator= (T... args) T swap cpp/memory/weak_ptr/swap (T... args) T weak_ptr cpp/memory/weak_ptr/weak_ptr (T... args) T owner_before cpp/memory/weak_ptr/owner_before (T... args) T ~weak_ptr cpp/memory/weak_ptr/~weak_ptr (T... args) T use_count cpp/memory/weak_ptr/use_count (T... args) T expired cpp/memory/weak_ptr/expired (T... args) T lock cpp/memory/weak_ptr/lock (T... args) T reset cpp/memory/weak_ptr/reset (T... args) std::bidirectional_iterator_tag cpp/iterator/iterator_tags std::wstring_convert cpp/locale/wstring_convert T converted cpp/locale/wstring_convert/converted (T... args) T to_bytes cpp/locale/wstring_convert/to_bytes (T... args) T ~wstring_convert cpp/locale/wstring_convert/~wstring_convert (T... args) T state cpp/locale/wstring_convert/state (T... args) T wstring_convert cpp/locale/wstring_convert/wstring_convert (T... args) T from_bytes cpp/locale/wstring_convert/from_bytes (T... args) std::greater_equal cpp/utility/functional/greater_equal T operator() cpp/utility/functional/greater_equal (T... args) std::is_trivially_constructible cpp/types/is_constructible std::string cpp/string/basic_string T push_back cpp/string/basic_string/push_back (T... args) T shrink_to_fit cpp/string/basic_string/shrink_to_fit (T... args) T rfind cpp/string/basic_string/rfind (T... args) T begin cpp/string/basic_string/begin (T... args) T erase cpp/string/basic_string/erase (T... args) T append cpp/string/basic_string/append (T... args) T data cpp/string/basic_string/data (T... args) T insert cpp/string/basic_string/insert (T... args) T assign cpp/string/basic_string/assign (T... args) T find_first_not_of cpp/string/basic_string/find_first_not_of (T... args) T back cpp/string/basic_string/back (T... args) T end cpp/string/basic_string/end (T... args) T resize cpp/string/basic_string/resize (T... args) T copy cpp/string/basic_string/copy (T... args) T find_last_of cpp/string/basic_string/find_last_of (T... args) T pop_back cpp/string/basic_string/pop_back (T... args) T replace cpp/string/basic_string/replace (T... args) T front cpp/string/basic_string/front (T... args) T substr cpp/string/basic_string/substr (T... args) T find cpp/string/basic_string/find (T... args) T compare cpp/string/basic_string/compare (T... args) T crbegin cpp/string/basic_string/rbegin (T... args) T cbegin cpp/string/basic_string/begin (T... args) T find_first_of cpp/string/basic_string/find_first_of (T... args) T rbegin cpp/string/basic_string/rbegin (T... args) T crend cpp/string/basic_string/rend (T... args) T size cpp/string/basic_string/size (T... args) T operator= cpp/string/basic_string/operator= (T... args) T find_last_not_of cpp/string/basic_string/find_last_not_of (T... args) T reserve cpp/string/basic_string/reserve (T... args) T capacity cpp/string/basic_string/capacity (T... args) T c_str cpp/string/basic_string/c_str (T... args) T empty cpp/string/basic_string/empty (T... args) T cend cpp/string/basic_string/end (T... args) T string cpp/string/basic_string/basic_string (T... args) T max_size cpp/string/basic_string/max_size (T... args) T rend cpp/string/basic_string/rend (T... args) T get_allocator cpp/string/basic_string/get_allocator (T... args) T clear cpp/string/basic_string/clear (T... args) T at cpp/string/basic_string/at (T... args) T swap cpp/string/basic_string/swap (T... args) T operator[] cpp/string/basic_string/operator_at (T... args) T length cpp/string/basic_string/size (T... args) std::discrete_distribution cpp/numeric/random/discrete_distribution T probabilities cpp/numeric/random/discrete_distribution/probabilities (T... args) T reset cpp/numeric/random/discrete_distribution/reset (T... args) T operator() cpp/numeric/random/discrete_distribution/operator() (T... args) T discrete_distribution cpp/numeric/random/discrete_distribution/discrete_distribution (T... args) T max cpp/numeric/random/discrete_distribution/max (T... args) T param cpp/numeric/random/discrete_distribution/param (T... args) T min cpp/numeric/random/discrete_distribution/min (T... args) std::wostream cpp/io/basic_ostream T seekp cpp/io/basic_ostream/seekp (T... args) T setstate cpp/io/basic_ios/setstate (T... args) T getloc cpp/io/ios_base/getloc (T... args) T precision cpp/io/ios_base/precision (T... args) T flags cpp/io/ios_base/flags (T... args) T widen cpp/io/basic_ios/widen (T... args) T fill cpp/io/basic_ios/fill (T... args) T setf cpp/io/ios_base/setf (T... args) T tellp cpp/io/basic_ostream/tellp (T... args) std::wostream::event_callback T operator bool cpp/io/basic_ios/operator_bool (T... args) T copyfmt cpp/io/basic_ios/copyfmt (T... args) T ~wostream cpp/io/basic_ostream/~basic_ostream (T... args) T sync_with_stdio cpp/io/ios_base/sync_with_stdio (T... args) T wostream cpp/io/basic_ostream/basic_ostream (T... args) T xalloc cpp/io/ios_base/xalloc (T... args) T exceptions cpp/io/basic_ios/exceptions (T... args) T iword cpp/io/ios_base/iword (T... args) T rdbuf cpp/io/basic_ios/rdbuf (T... args) T operator<< cpp/io/basic_ostream/operator_ltlt (T... args) T narrow cpp/io/basic_ios/narrow (T... args) T good cpp/io/basic_ios/good (T... args) T operator! cpp/io/basic_ios/operator! (T... args) T write cpp/io/basic_ostream/write (T... args) T unsetf cpp/io/ios_base/unsetf (T... args) T width cpp/io/ios_base/width (T... args) T rdstate cpp/io/basic_ios/rdstate (T... args) T tie cpp/io/basic_ios/tie (T... args) std::wostream::failure T move cpp/io/basic_ios/move (T... args) T eof cpp/io/basic_ios/eof (T... args) T register_callback cpp/io/ios_base/register_callback (T... args) T pword cpp/io/ios_base/pword (T... args) T swap cpp/io/basic_ios/swap (T... args) T flush cpp/io/basic_ostream/flush (T... args) T set_rdbuf cpp/io/basic_ios/set_rdbuf (T... args) T fail cpp/io/basic_ios/fail (T... args) std::wostream::sentry T imbue cpp/io/basic_ios/imbue (T... args) T bad cpp/io/basic_ios/bad (T... args) T clear cpp/io/basic_ios/clear (T... args) T put cpp/io/basic_ostream/put (T... args) T init cpp/io/basic_ios/init (T... args) std::wostream::event_callback cpp/io/ios_base/event_callback std::wostream::failure cpp/io/ios_base/failure T failure cpp/io/ios_base/failure (T... args) T what cpp/error/exception/what (T... args) std::wostream::sentry cpp/io/basic_ostream/sentry T ~sentry cpp/io/basic_ostream/sentry (T... args) T operator bool cpp/io/basic_ostream/sentry (T... args) T sentry cpp/io/basic_ostream/sentry (T... args) std::is_polymorphic cpp/types/is_polymorphic std::reverse_iterator cpp/iterator/reverse_iterator std::bad_array_new_length cpp/memory/new/bad_array_new_length T bad_array_new_length cpp/memory/new/bad_array_new_length/bad_array_new_length (T... args) T what cpp/memory/new/bad_alloc (T... args) std::condition_variable cpp/thread/condition_variable T wait cpp/thread/condition_variable/wait (T... args) T notify_one cpp/thread/condition_variable/notify_one (T... args) T wait_for cpp/thread/condition_variable/wait_for (T... args) T notify_all cpp/thread/condition_variable/notify_all (T... args) T native_handle cpp/thread/condition_variable/native_handle (T... args) T wait_until cpp/thread/condition_variable/wait_until (T... args) T condition_variable cpp/thread/condition_variable/condition_variable (T... args) T ~condition_variable cpp/thread/condition_variable/~condition_variable (T... args) std::ranlux48 cpp/numeric/random/discard_block_engine T discard cpp/numeric/random/discard_block_engine/discard (T... args) T operator() cpp/numeric/random/discard_block_engine/operator() (T... args) T ranlux48 cpp/numeric/random/discard_block_engine/discard_block_engine (T... args) T base cpp/numeric/random/discard_block_engine/base (T... args) T seed cpp/numeric/random/discard_block_engine/seed (T... args) T max cpp/numeric/random/discard_block_engine/max (T... args) T min cpp/numeric/random/discard_block_engine/min (T... args) std::unexpected_handler cpp/error/unexpected_handler std::piecewise_constant_distribution cpp/numeric/random/piecewise_constant_distribution T densities cpp/numeric/random/piecewise_constant_distribution/params (T... args) T max cpp/numeric/random/piecewise_constant_distribution/max (T... args) T intervals cpp/numeric/random/piecewise_constant_distribution/params (T... args) T reset cpp/numeric/random/piecewise_constant_distribution/reset (T... args) T piecewise_constant_distribution cpp/numeric/random/piecewise_constant_distribution/piecewise_constant_distribution (T... args) T operator() cpp/numeric/random/piecewise_constant_distribution/operator() (T... args) T param cpp/numeric/random/piecewise_constant_distribution/param (T... args) T min cpp/numeric/random/piecewise_constant_distribution/min (T... args) std::codecvt_base cpp/locale/codecvt_base std::set cpp/container/set T begin cpp/container/set/begin (T... args) T erase cpp/container/set/erase (T... args) T insert cpp/container/set/insert (T... args) T ~set cpp/container/set/~set (T... args) T rbegin cpp/container/set/rbegin (T... args) T end cpp/container/set/end (T... args) T emplace_hint cpp/container/set/emplace_hint (T... args) T key_comp cpp/container/set/key_comp (T... args) T count cpp/container/set/count (T... args) T find cpp/container/set/find (T... args) T crbegin cpp/container/set/rbegin (T... args) T cbegin cpp/container/set/begin (T... args) T upper_bound cpp/container/set/upper_bound (T... args) T swap cpp/container/set/swap (T... args) T crend cpp/container/set/rend (T... args) T size cpp/container/set/size (T... args) T set cpp/container/set/set (T... args) T operator= cpp/container/set/operator= (T... args) T value_comp cpp/container/set/value_comp (T... args) T empty cpp/container/set/empty (T... args) T lower_bound cpp/container/set/lower_bound (T... args) T get_allocator cpp/container/set/get_allocator (T... args) T max_size cpp/container/set/max_size (T... args) T rend cpp/container/set/rend (T... args) T cend cpp/container/set/end (T... args) T clear cpp/container/set/clear (T... args) T equal_range cpp/container/set/equal_range (T... args) T emplace cpp/container/set/emplace (T... args) std::forward_iterator_tag cpp/iterator/iterator_tags std::codecvt_byname cpp/locale/codecvt_byname std::codecvt_byname::extern_type T out cpp/locale/codecvt/out (T... args) T do_length cpp/locale/codecvt/length (T... args) T do_unshift cpp/locale/codecvt/unshift (T... args) T do_encoding cpp/locale/codecvt/encoding (T... args) T do_in cpp/locale/codecvt/in (T... args) T unshift cpp/locale/codecvt/unshift (T... args) T max_length cpp/locale/codecvt/max_length (T... args) std::codecvt_byname::state_type T encoding cpp/locale/codecvt/encoding (T... args) T always_noconv cpp/locale/codecvt/always_noconv (T... args) T do_out cpp/locale/codecvt/out (T... args) T codecvt_byname cpp/locale/codecvt_byname (T... args) T do_max_length cpp/locale/codecvt/max_length (T... args) T do_always_noconv cpp/locale/codecvt/always_noconv (T... args) T in cpp/locale/codecvt/in (T... args) std::codecvt_byname::intern_type T length cpp/locale/codecvt/length (T... args) T ~codecvt_byname cpp/locale/codecvt_byname (T... args) std::codecvt_byname::extern_type cpp/locale/codecvt std::codecvt_byname::state_type cpp/locale/codecvt std::codecvt_byname::intern_type cpp/locale/codecvt std::pointer_safety cpp/memory/gc/pointer_safety std::uint_least64_t cpp/types/integer std::placeholders cpp/utility/functional/placeholders std::nothrow_t cpp/memory/new/nothrow_t std::is_nothrow_copy_assignable cpp/types/is_copy_assignable std::is_same cpp/types/is_same std::unique_lock cpp/thread/unique_lock T mutex cpp/thread/unique_lock/mutex (T... args) T swap cpp/thread/unique_lock/swap (T... args) T owns_lock cpp/thread/unique_lock/owns_lock (T... args) T try_lock_for cpp/thread/unique_lock/try_lock_for (T... args) T release cpp/thread/unique_lock/release (T... args) T lock cpp/thread/unique_lock/lock (T... args) T operator bool cpp/thread/unique_lock/operator_bool (T... args) T ~unique_lock cpp/thread/unique_lock/~unique_lock (T... args) T unlock cpp/thread/unique_lock/unlock (T... args) T operator= cpp/thread/unique_lock/operator= (T... args) T try_lock_until cpp/thread/unique_lock/try_lock_until (T... args) T try_lock cpp/thread/unique_lock/try_lock (T... args) T unique_lock cpp/thread/unique_lock/unique_lock (T... args) std::basic_ostringstream cpp/io/basic_ostringstream T seekp cpp/io/basic_ostream/seekp (T... args) T setstate cpp/io/basic_ios/setstate (T... args) T getloc cpp/io/ios_base/getloc (T... args) T precision cpp/io/ios_base/precision (T... args) T flags cpp/io/ios_base/flags (T... args) T str cpp/io/basic_ostringstream/str (T... args) T widen cpp/io/basic_ios/widen (T... args) T fill cpp/io/basic_ios/fill (T... args) T setf cpp/io/ios_base/setf (T... args) std::basic_ostringstream::event_callback T good cpp/io/basic_ios/good (T... args) T copyfmt cpp/io/basic_ios/copyfmt (T... args) T tellp cpp/io/basic_ostream/tellp (T... args) T sync_with_stdio cpp/io/ios_base/sync_with_stdio (T... args) T xalloc cpp/io/ios_base/xalloc (T... args) T exceptions cpp/io/basic_ios/exceptions (T... args) T iword cpp/io/ios_base/iword (T... args) T operator<< cpp/io/basic_ostream/operator_ltlt (T... args) T narrow cpp/io/basic_ios/narrow (T... args) T operator bool cpp/io/basic_ios/operator_bool (T... args) T operator! cpp/io/basic_ios/operator! (T... args) T write cpp/io/basic_ostream/write (T... args) T unsetf cpp/io/ios_base/unsetf (T... args) T width cpp/io/ios_base/width (T... args) T rdstate cpp/io/basic_ios/rdstate (T... args) T tie cpp/io/basic_ios/tie (T... args) std::basic_ostringstream::failure T move cpp/io/basic_ios/move (T... args) T eof cpp/io/basic_ios/eof (T... args) T register_callback cpp/io/ios_base/register_callback (T... args) T pword cpp/io/ios_base/pword (T... args) T flush cpp/io/basic_ostream/flush (T... args) T set_rdbuf cpp/io/basic_ios/set_rdbuf (T... args) T fail cpp/io/basic_ios/fail (T... args) T operator= cpp/io/basic_ostringstream/operator= (T... args) T swap cpp/io/basic_ios/swap (T... args) T rdbuf cpp/io/basic_ios/rdbuf (T... args) T imbue cpp/io/basic_ios/imbue (T... args) T basic_ostringstream cpp/io/basic_ostringstream/basic_ostringstream (T... args) T bad cpp/io/basic_ios/bad (T... args) T clear cpp/io/basic_ios/clear (T... args) std::basic_ostringstream::sentry T put cpp/io/basic_ostream/put (T... args) T init cpp/io/basic_ios/init (T... args) std::basic_ostringstream::event_callback cpp/io/ios_base/event_callback std::basic_ostringstream::failure cpp/io/ios_base/failure T failure cpp/io/ios_base/failure (T... args) T what cpp/error/exception/what (T... args) std::basic_ostringstream::sentry cpp/io/basic_ostream/sentry T ~sentry cpp/io/basic_ostream/sentry (T... args) T operator bool cpp/io/basic_ostream/sentry (T... args) T sentry cpp/io/basic_ostream/sentry (T... args) std::is_error_code_enum cpp/error/error_code/is_error_code_enum std::time_put_byname cpp/locale/time_put_byname T time_put_byname cpp/locale/time_put_byname (T... args) std::time_put_byname::char_type T do_put cpp/locale/time_put/put (T... args) T put cpp/locale/time_put/put (T... args) T ~time_put_byname cpp/locale/time_put_byname (T... args) std::time_put_byname::iter_type std::time_put_byname::char_type cpp/locale/time_put std::time_put_byname::iter_type cpp/locale/time_put std::time_get cpp/locale/time_get T do_date_order cpp/locale/time_get/date_order (T... args) T do_get cpp/locale/time_get/get (T... args) T do_get_monthname cpp/locale/time_get/get_monthname (T... args) T get_weekday cpp/locale/time_get/get_weekday (T... args) T do_get_time cpp/locale/time_get/get_time (T... args) T ~time_get cpp/locale/time_get/~time_get (T... args) T do_get_year cpp/locale/time_get/get_year (T... args) std::time_get::iter_type T get_monthname cpp/locale/time_get/get_monthname (T... args) T get_time cpp/locale/time_get/get_time (T... args) T time_get cpp/locale/time_get/time_get (T... args) T do_get_date cpp/locale/time_get/get_date (T... args) T get_date cpp/locale/time_get/get_date (T... args) std::time_get::char_type T date_order cpp/locale/time_get/date_order (T... args) T get_year cpp/locale/time_get/get_year (T... args) T get cpp/locale/time_get/get (T... args) T do_get_weekday cpp/locale/time_get/get_weekday (T... args) std::time_get::iter_type cpp/locale/time_get std::time_get::char_type cpp/locale/time_get std::regex cpp/regex/basic_regex T operator= cpp/regex/basic_regex/operator= (T... args) T swap cpp/regex/basic_regex/swap (T... args) T imbue cpp/regex/basic_regex/imbue (T... args) T assign cpp/regex/basic_regex/assign (T... args) T regex cpp/regex/basic_regex/basic_regex (T... args) T mark_count cpp/regex/basic_regex/mark_count (T... args) T getloc cpp/regex/basic_regex/getloc (T... args) T flags cpp/regex/basic_regex/flags (T... args) T ~regex cpp/regex/basic_regex/~basic_regex (T... args) std::cin cpp/io/basic_istream std::unordered_map cpp/container/unordered_map T max_bucket_count cpp/container/unordered_map/max_bucket_count (T... args) T cbegin cpp/container/unordered_map/begin (T... args) T erase cpp/container/unordered_map/erase (T... args) T insert cpp/container/unordered_map/insert (T... args) T bucket_count cpp/container/unordered_map/bucket_count (T... args) T max_load_factor cpp/container/unordered_map/max_load_factor (T... args) T end cpp/container/unordered_map/end (T... args) T emplace_hint cpp/container/unordered_map/emplace_hint (T... args) T end(int) cpp/container/unordered_map/end2 (T... args) T load_factor cpp/container/unordered_map/load_factor (T... args) T get_allocator cpp/container/unordered_map/get_allocator (T... args) T key_eq cpp/container/unordered_map/key_eq (T... args) T ~unordered_map cpp/container/unordered_map/~unordered_map (T... args) T hash_function cpp/container/unordered_map/hash_function (T... args) T find cpp/container/unordered_map/find (T... args) T at cpp/container/unordered_map/at (T... args) T cbegin(int) cpp/container/unordered_map/begin2 (T... args) T swap cpp/container/unordered_map/swap (T... args) T begin(int) cpp/container/unordered_map/begin2 (T... args) T unordered_map cpp/container/unordered_map/unordered_map (T... args) T size cpp/container/unordered_map/size (T... args) T operator= cpp/container/unordered_map/operator= (T... args) T cend(int) cpp/container/unordered_map/end2 (T... args) T reserve cpp/container/unordered_map/reserve (T... args) T rehash cpp/container/unordered_map/rehash (T... args) T bucket cpp/container/unordered_map/bucket (T... args) T empty cpp/container/unordered_map/empty (T... args) T cend cpp/container/unordered_map/end (T... args) T max_size cpp/container/unordered_map/max_size (T... args) T count cpp/container/unordered_map/count (T... args) T clear cpp/container/unordered_map/clear (T... args) T equal_range cpp/container/unordered_map/equal_range (T... args) T emplace cpp/container/unordered_map/emplace (T... args) T operator[] cpp/container/unordered_map/operator_at (T... args) T begin cpp/container/unordered_map/begin (T... args) T bucket_size cpp/container/unordered_map/bucket_size (T... args) std::initializer_list cpp/utility/initializer_list T end cpp/utility/initializer_list/end (T... args) T size cpp/utility/initializer_list/size (T... args) T initializer_list cpp/utility/initializer_list/initializer_list (T... args) T begin cpp/utility/initializer_list/begin (T... args) std::is_const cpp/types/is_const std::basic_regex cpp/regex/basic_regex T basic_regex cpp/regex/basic_regex/basic_regex (T... args) T operator= cpp/regex/basic_regex/operator= (T... args) T swap cpp/regex/basic_regex/swap (T... args) T assign cpp/regex/basic_regex/assign (T... args) T ~basic_regex cpp/regex/basic_regex/~basic_regex (T... args) T getloc cpp/regex/basic_regex/getloc (T... args) T mark_count cpp/regex/basic_regex/mark_count (T... args) T imbue cpp/regex/basic_regex/imbue (T... args) T flags cpp/regex/basic_regex/flags (T... args) std::poisson_distribution cpp/numeric/random/poisson_distribution T poisson_distribution cpp/numeric/random/poisson_distribution/poisson_distribution (T... args) T mean cpp/numeric/random/poisson_distribution/mean (T... args) T max cpp/numeric/random/poisson_distribution/max (T... args) T param cpp/numeric/random/poisson_distribution/param (T... args) T min cpp/numeric/random/poisson_distribution/min (T... args) T reset cpp/numeric/random/poisson_distribution/reset (T... args) std::bad_typeid cpp/types/bad_typeid T bad_typeid cpp/types/bad_typeid/bad_typeid (T... args) T what cpp/error/exception/what (T... args) std::less_equal cpp/utility/functional/less_equal T operator() cpp/utility/functional/less_equal (T... args) std::sig_atomic_t cpp/utility/program/sig_atomic_t std::make_unsigned cpp/types/make_unsigned std::basic_filebuf cpp/io/basic_filebuf T eback cpp/io/basic_streambuf/gptr (T... args) T setp cpp/io/basic_streambuf/setp (T... args) T pbackfail cpp/io/basic_streambuf/pbackfail (T... args) T seekoff cpp/io/basic_streambuf/pubseekoff (T... args) T pbase cpp/io/basic_streambuf/pptr (T... args) T egptr cpp/io/basic_streambuf/gptr (T... args) T basic_filebuf cpp/io/basic_filebuf/basic_filebuf (T... args) T underflow cpp/io/basic_streambuf/underflow (T... args) T setbuf cpp/io/basic_streambuf/pubsetbuf (T... args) T gbump cpp/io/basic_streambuf/gbump (T... args) T xsgetn cpp/io/basic_streambuf/sgetn (T... args) T is_open cpp/io/basic_filebuf/is_open (T... args) T sputn cpp/io/basic_streambuf/sputn (T... args) T pptr cpp/io/basic_streambuf/pptr (T... args) T seekpos cpp/io/basic_streambuf/pubseekpos (T... args) T pubsync cpp/io/basic_streambuf/pubsync (T... args) T pubseekoff cpp/io/basic_streambuf/pubseekoff (T... args) T setg cpp/io/basic_streambuf/setg (T... args) T pbump cpp/io/basic_streambuf/pbump (T... args) T pubseekpos cpp/io/basic_streambuf/pubseekpos (T... args) T ~basic_filebuf cpp/io/basic_filebuf/~basic_filebuf (T... args) T sputbackc cpp/io/basic_streambuf/sputbackc (T... args) T in_avail cpp/io/basic_streambuf/in_avail (T... args) T getloc cpp/io/basic_streambuf/getloc (T... args) T sungetc cpp/io/basic_streambuf/sungetc (T... args) T epptr cpp/io/basic_streambuf/pptr (T... args) T close cpp/io/basic_filebuf/close (T... args) T sync cpp/io/basic_streambuf/pubsync (T... args) T xsputn cpp/io/basic_streambuf/sputn (T... args) T pubimbue cpp/io/basic_streambuf/pubimbue (T... args) T showmanyc cpp/io/basic_streambuf/showmanyc (T... args) T open cpp/io/basic_filebuf/open (T... args) T sgetc cpp/io/basic_streambuf/sgetc (T... args) T swap cpp/io/basic_streambuf/swap (T... args) T sputc cpp/io/basic_streambuf/sputc (T... args) T overflow cpp/io/basic_streambuf/overflow (T... args) T uflow cpp/io/basic_streambuf/uflow (T... args) T sgetn cpp/io/basic_streambuf/sgetn (T... args) T sbumpc cpp/io/basic_streambuf/sbumpc (T... args) T operator= cpp/io/basic_filebuf/operator= (T... args) T pubsetbuf cpp/io/basic_streambuf/pubsetbuf (T... args) T imbue cpp/io/basic_streambuf/pubimbue (T... args) T snextc cpp/io/basic_streambuf/snextc (T... args) T gptr cpp/io/basic_streambuf/gptr (T... args) std::logical_or cpp/utility/functional/logical_or T operator() cpp/utility/functional/logical_or (T... args) std::wstringbuf cpp/io/basic_stringbuf T pptr cpp/io/basic_streambuf/pptr (T... args) T epptr cpp/io/basic_streambuf/pptr (T... args) T eback cpp/io/basic_streambuf/gptr (T... args) T setp cpp/io/basic_streambuf/setp (T... args) T sputbackc cpp/io/basic_streambuf/sputbackc (T... args) T sgetc cpp/io/basic_streambuf/sgetc (T... args) T sungetc cpp/io/basic_streambuf/sungetc (T... args) T pubseekoff cpp/io/basic_streambuf/pubseekoff (T... args) T seekoff cpp/io/basic_streambuf/pubseekoff (T... args) T str cpp/io/basic_stringbuf/str (T... args) T sync cpp/io/basic_streambuf/pubsync (T... args) T xsputn cpp/io/basic_streambuf/sputn (T... args) T pbase cpp/io/basic_streambuf/pptr (T... args) T pubimbue cpp/io/basic_streambuf/pubimbue (T... args) T showmanyc cpp/io/basic_streambuf/showmanyc (T... args) T egptr cpp/io/basic_streambuf/gptr (T... args) T seekpos cpp/io/basic_streambuf/pubseekpos (T... args) T underflow cpp/io/basic_streambuf/underflow (T... args) T setbuf cpp/io/basic_streambuf/pubsetbuf (T... args) T gbump cpp/io/basic_streambuf/gbump (T... args) T in_avail cpp/io/basic_streambuf/in_avail (T... args) T swap cpp/io/basic_streambuf/swap (T... args) T pbackfail cpp/io/basic_streambuf/pbackfail (T... args) T sputc cpp/io/basic_streambuf/sputc (T... args) T xsgetn cpp/io/basic_streambuf/sgetn (T... args) T uflow cpp/io/basic_streambuf/uflow (T... args) T gptr cpp/io/basic_streambuf/gptr (T... args) T sputn cpp/io/basic_streambuf/sputn (T... args) T sgetn cpp/io/basic_streambuf/sgetn (T... args) T sbumpc cpp/io/basic_streambuf/sbumpc (T... args) T overflow cpp/io/basic_streambuf/overflow (T... args) T operator= cpp/io/basic_stringbuf/operator= (T... args) T pbump cpp/io/basic_streambuf/pbump (T... args) T pubsetbuf cpp/io/basic_streambuf/pubsetbuf (T... args) T pubsync cpp/io/basic_streambuf/pubsync (T... args) T imbue cpp/io/basic_streambuf/pubimbue (T... args) T setg cpp/io/basic_streambuf/setg (T... args) T snextc cpp/io/basic_streambuf/snextc (T... args) T getloc cpp/io/basic_streambuf/getloc (T... args) T pubseekpos cpp/io/basic_streambuf/pubseekpos (T... args) T wstringbuf cpp/io/basic_stringbuf/basic_stringbuf (T... args) std::kilo cpp/numeric/ratio/ratio std::bernoulli_distribution cpp/numeric/random/bernoulli_distribution T bernoulli_distribution cpp/numeric/random/bernoulli_distribution/bernoulli_distribution (T... args) T p cpp/numeric/random/bernoulli_distribution/p (T... args) T reset cpp/numeric/random/bernoulli_distribution/reset (T... args) T max cpp/numeric/random/bernoulli_distribution/max (T... args) T param cpp/numeric/random/bernoulli_distribution/param (T... args) T min cpp/numeric/random/bernoulli_distribution/min (T... args) std::int16_t cpp/types/integer std::basic_ios cpp/io/basic_ios T setf cpp/io/ios_base/setf (T... args) T getloc cpp/io/ios_base/getloc (T... args) T precision cpp/io/ios_base/precision (T... args) T imbue cpp/io/ios_base/imbue (T... args) T flags cpp/io/ios_base/flags (T... args) T operator! cpp/io/basic_ios/operator! (T... args) std::basic_ios::failure T widen cpp/io/basic_ios/widen (T... args) T width cpp/io/ios_base/width (T... args) T narrow cpp/io/basic_ios/narrow (T... args) T basic_ios cpp/io/basic_ios/basic_ios (T... args) T unsetf cpp/io/ios_base/unsetf (T... args) T ~basic_ios cpp/io/basic_ios/~basic_ios (T... args) T rdstate cpp/io/basic_ios/rdstate (T... args) std::basic_ios::event_callback T operator bool cpp/io/basic_ios/operator_bool (T... args) T setstate cpp/io/basic_ios/setstate (T... args) T tie cpp/io/basic_ios/tie (T... args) T eof cpp/io/basic_ios/eof (T... args) T register_callback cpp/io/ios_base/register_callback (T... args) T pword cpp/io/ios_base/pword (T... args) T good cpp/io/basic_ios/good (T... args) T copyfmt cpp/io/basic_ios/copyfmt (T... args) T set_rdbuf cpp/io/basic_ios/set_rdbuf (T... args) T sync_with_stdio cpp/io/ios_base/sync_with_stdio (T... args) T move cpp/io/basic_ios/move (T... args) T rdbuf cpp/io/basic_ios/rdbuf (T... args) T fail cpp/io/basic_ios/fail (T... args) T fill cpp/io/basic_ios/fill (T... args) T swap cpp/io/basic_ios/swap (T... args) T xalloc cpp/io/ios_base/xalloc (T... args) T bad cpp/io/basic_ios/bad (T... args) T clear cpp/io/basic_ios/clear (T... args) T exceptions cpp/io/basic_ios/exceptions (T... args) T iword cpp/io/ios_base/iword (T... args) T init cpp/io/basic_ios/init (T... args) std::basic_ios::failure cpp/io/ios_base/failure T failure cpp/io/ios_base/failure (T... args) T what cpp/error/exception/what (T... args) std::basic_ios::event_callback cpp/io/ios_base/event_callback std::int32_t cpp/types/integer std::is_rvalue_reference cpp/types/is_rvalue_reference std::integral_constant cpp/types/integral_constant std::wsmatch cpp/regex/match_results T cbegin cpp/regex/match_results/begin (T... args) T format cpp/regex/match_results/format (T... args) T wsmatch cpp/regex/match_results/match_results (T... args) T size cpp/regex/match_results/size (T... args) T swap cpp/regex/match_results/swap (T... args) T position cpp/regex/match_results/position (T... args) T prefix cpp/regex/match_results/prefix (T... args) T str cpp/regex/match_results/str (T... args) T ~wsmatch cpp/regex/match_results/~match_results (T... args) T empty cpp/regex/match_results/empty (T... args) T suffix cpp/regex/match_results/suffix (T... args) T get_allocator cpp/regex/match_results/get_allocator (T... args) T end cpp/regex/match_results/end (T... args) T max_size cpp/regex/match_results/max_size (T... args) T ready cpp/regex/match_results/ready (T... args) T cend cpp/regex/match_results/end (T... args) T operator[] cpp/regex/match_results/operator_at (T... args) T length cpp/regex/match_results/length (T... args) T begin cpp/regex/match_results/begin (T... args) std::cerr cpp/io/basic_ostream std::codecvt_utf8 cpp/locale/codecvt_utf8 std::codecvt_utf8::extern_type T out cpp/locale/codecvt/out (T... args) T do_length cpp/locale/codecvt/length (T... args) T do_unshift cpp/locale/codecvt/unshift (T... args) T do_encoding cpp/locale/codecvt/encoding (T... args) T do_in cpp/locale/codecvt/in (T... args) T unshift cpp/locale/codecvt/unshift (T... args) T max_length cpp/locale/codecvt/max_length (T... args) std::codecvt_utf8::state_type T encoding cpp/locale/codecvt/encoding (T... args) T always_noconv cpp/locale/codecvt/always_noconv (T... args) T do_out cpp/locale/codecvt/out (T... args) T do_max_length cpp/locale/codecvt/max_length (T... args) T do_always_noconv cpp/locale/codecvt/always_noconv (T... args) T in cpp/locale/codecvt/in (T... args) std::codecvt_utf8::intern_type T length cpp/locale/codecvt/length (T... args) std::codecvt_utf8::extern_type cpp/locale/codecvt std::codecvt_utf8::state_type cpp/locale/codecvt std::codecvt_utf8::intern_type cpp/locale/codecvt std::ratio_add cpp/numeric/ratio/ratio_add std::is_trivially_move_constructible cpp/types/is_move_constructible std::wcsub_match cpp/regex/sub_match T operator string_type cpp/regex/sub_match/str (T... args) T wcsub_match cpp/regex/sub_match/sub_match (T... args) T str cpp/regex/sub_match/str (T... args) T length cpp/regex/sub_match/length (T... args) T compare cpp/regex/sub_match/compare (T... args) std::is_member_pointer cpp/types/is_member_pointer std::wstreampos cpp/io/fpos T state cpp/io/fpos/state (T... args) std::uint_least16_t cpp/types/integer std::tuple cpp/utility/tuple T operator= cpp/utility/tuple/operator= (T... args) T swap cpp/utility/tuple/swap (T... args) T tuple cpp/utility/tuple/tuple (T... args) std::make_signed cpp/types/make_signed std::logic_error cpp/error/logic_error T logic_error cpp/error/logic_error (T... args) T what cpp/error/exception/what (T... args) std::sregex_iterator cpp/regex/regex_iterator T operator!= cpp/regex/regex_iterator/operator_cmp (T... args) T operator= cpp/regex/regex_iterator/operator= (T... args) T operator== cpp/regex/regex_iterator/operator_cmp (T... args) T operator-> cpp/regex/regex_iterator/operator* (T... args) T operator++ cpp/regex/regex_iterator/operator_arith (T... args) T sregex_iterator cpp/regex/regex_iterator/regex_iterator (T... args) T operator* cpp/regex/regex_iterator/operator* (T... args) T operator++(int) cpp/regex/regex_iterator/operator_arith (T... args) std::int_least64_t cpp/types/integer std::binary_negate cpp/utility/functional/binary_negate T operator() cpp/utility/functional/binary_negate (T... args) T binary_negate cpp/utility/functional/binary_negate (T... args) std::discard_block_engine cpp/numeric/random/discard_block_engine T discard cpp/numeric/random/discard_block_engine/discard (T... args) T max cpp/numeric/random/discard_block_engine/max (T... args) T operator() cpp/numeric/random/discard_block_engine/operator() (T... args) T base cpp/numeric/random/discard_block_engine/base (T... args) T seed cpp/numeric/random/discard_block_engine/seed (T... args) T discard_block_engine cpp/numeric/random/discard_block_engine/discard_block_engine (T... args) T min cpp/numeric/random/discard_block_engine/min (T... args) std::is_trivially_assignable cpp/types/is_assignable std::add_cv cpp/types/add_cv std::pico cpp/numeric/ratio/ratio std::iterator_traits cpp/iterator/iterator_traits std::is_trivially_default_constructible cpp/types/is_default_constructible std::shared_ptr cpp/memory/shared_ptr T shared_ptr cpp/memory/shared_ptr/shared_ptr (T... args) T ~shared_ptr cpp/memory/shared_ptr/~shared_ptr (T... args) T swap cpp/memory/shared_ptr/swap (T... args) T owner_before cpp/memory/shared_ptr/owner_before (T... args) T reset cpp/memory/shared_ptr/reset (T... args) T operator-> cpp/memory/shared_ptr/operator* (T... args) T operator= cpp/memory/shared_ptr/operator= (T... args) T unique cpp/memory/shared_ptr/unique (T... args) T operator* cpp/memory/shared_ptr/operator* (T... args) T operator bool cpp/memory/shared_ptr/operator_bool (T... args) T get cpp/memory/shared_ptr/get (T... args) std::bad_alloc cpp/memory/new/bad_alloc T operator= cpp/memory/new/bad_alloc (T... args) T bad_alloc cpp/memory/new/bad_alloc (T... args) T what cpp/error/exception/what (T... args) std::ostringstream cpp/io/basic_ostringstream T seekp cpp/io/basic_ostream/seekp (T... args) T setstate cpp/io/basic_ios/setstate (T... args) T getloc cpp/io/ios_base/getloc (T... args) T precision cpp/io/ios_base/precision (T... args) T flags cpp/io/ios_base/flags (T... args) T str cpp/io/basic_ostringstream/str (T... args) T widen cpp/io/basic_ios/widen (T... args) T fill cpp/io/basic_ios/fill (T... args) T setf cpp/io/ios_base/setf (T... args) std::ostringstream::event_callback T good cpp/io/basic_ios/good (T... args) T copyfmt cpp/io/basic_ios/copyfmt (T... args) T tellp cpp/io/basic_ostream/tellp (T... args) T sync_with_stdio cpp/io/ios_base/sync_with_stdio (T... args) T ostringstream cpp/io/basic_ostringstream/basic_ostringstream (T... args) T xalloc cpp/io/ios_base/xalloc (T... args) T exceptions cpp/io/basic_ios/exceptions (T... args) T iword cpp/io/ios_base/iword (T... args) T operator<< cpp/io/basic_ostream/operator_ltlt (T... args) T narrow cpp/io/basic_ios/narrow (T... args) T operator bool cpp/io/basic_ios/operator_bool (T... args) T operator! cpp/io/basic_ios/operator! (T... args) T write cpp/io/basic_ostream/write (T... args) T unsetf cpp/io/ios_base/unsetf (T... args) T width cpp/io/ios_base/width (T... args) T rdstate cpp/io/basic_ios/rdstate (T... args) T tie cpp/io/basic_ios/tie (T... args) std::ostringstream::failure T move cpp/io/basic_ios/move (T... args) T eof cpp/io/basic_ios/eof (T... args) T register_callback cpp/io/ios_base/register_callback (T... args) T pword cpp/io/ios_base/pword (T... args) T flush cpp/io/basic_ostream/flush (T... args) T set_rdbuf cpp/io/basic_ios/set_rdbuf (T... args) T fail cpp/io/basic_ios/fail (T... args) T operator= cpp/io/basic_ostringstream/operator= (T... args) T swap cpp/io/basic_ios/swap (T... args) T rdbuf cpp/io/basic_ios/rdbuf (T... args) T imbue cpp/io/basic_ios/imbue (T... args) T bad cpp/io/basic_ios/bad (T... args) T clear cpp/io/basic_ios/clear (T... args) std::ostringstream::sentry T put cpp/io/basic_ostream/put (T... args) T init cpp/io/basic_ios/init (T... args) std::ostringstream::event_callback cpp/io/ios_base/event_callback std::ostringstream::failure cpp/io/ios_base/failure T failure cpp/io/ios_base/failure (T... args) T what cpp/error/exception/what (T... args) std::ostringstream::sentry cpp/io/basic_ostream/sentry T ~sentry cpp/io/basic_ostream/sentry (T... args) T operator bool cpp/io/basic_ostream/sentry (T... args) T sentry cpp/io/basic_ostream/sentry (T... args) std::basic_fstream cpp/io/basic_fstream T seekp cpp/io/basic_ostream/seekp (T... args) T setstate cpp/io/basic_ios/setstate (T... args) T basic_fstream cpp/io/basic_fstream/basic_fstream (T... args) T getloc cpp/io/ios_base/getloc (T... args) T precision cpp/io/ios_base/precision (T... args) T width cpp/io/ios_base/width (T... args) T flags cpp/io/ios_base/flags (T... args) T widen cpp/io/basic_ios/widen (T... args) T operator>> cpp/io/basic_istream/operator_gtgt (T... args) T fill cpp/io/basic_ios/fill (T... args) T setf cpp/io/ios_base/setf (T... args) T seekg cpp/io/basic_istream/seekg (T... args) T open cpp/io/basic_fstream/open (T... args) T good cpp/io/basic_ios/good (T... args) T copyfmt cpp/io/basic_ios/copyfmt (T... args) T tellp cpp/io/basic_ostream/tellp (T... args) T sync_with_stdio cpp/io/ios_base/sync_with_stdio (T... args) T gcount cpp/io/basic_istream/gcount (T... args) T unget cpp/io/basic_istream/unget (T... args) T xalloc cpp/io/ios_base/xalloc (T... args) T read cpp/io/basic_istream/read (T... args) T getline cpp/io/basic_istream/getline (T... args) T eof cpp/io/basic_ios/eof (T... args) T exceptions cpp/io/basic_ios/exceptions (T... args) std::basic_fstream::sentry T register_callback cpp/io/ios_base/register_callback (T... args) T operator<< cpp/io/basic_ostream/operator_ltlt (T... args) std::basic_fstream::event_callback T narrow cpp/io/basic_ios/narrow (T... args) T operator bool cpp/io/basic_ios/operator_bool (T... args) T write cpp/io/basic_ostream/write (T... args) T close cpp/io/basic_fstream/close (T... args) T sync cpp/io/basic_istream/sync (T... args) T putback cpp/io/basic_istream/putback (T... args) T ignore cpp/io/basic_istream/ignore (T... args) T unsetf cpp/io/ios_base/unsetf (T... args) T readsome cpp/io/basic_istream/readsome (T... args) T rdstate cpp/io/basic_ios/rdstate (T... args) T tie cpp/io/basic_ios/tie (T... args) std::basic_fstream::failure T move cpp/io/basic_ios/move (T... args) T get cpp/io/basic_istream/get (T... args) T operator! cpp/io/basic_ios/operator! (T... args) T pword cpp/io/ios_base/pword (T... args) T swap cpp/io/basic_ios/swap (T... args) T flush cpp/io/basic_ostream/flush (T... args) T tellg cpp/io/basic_istream/tellg (T... args) T set_rdbuf cpp/io/basic_ios/set_rdbuf (T... args) T fail cpp/io/basic_ios/fail (T... args) T is_open cpp/io/basic_fstream/is_open (T... args) T peek cpp/io/basic_istream/peek (T... args) T operator= cpp/io/basic_fstream/operator= (T... args) T iword cpp/io/ios_base/iword (T... args) T rdbuf cpp/io/basic_ios/rdbuf (T... args) T imbue cpp/io/basic_ios/imbue (T... args) T bad cpp/io/basic_ios/bad (T... args) T clear cpp/io/basic_ios/clear (T... args) T put cpp/io/basic_ostream/put (T... args) T init cpp/io/basic_ios/init (T... args) std::basic_fstream::sentry cpp/io/basic_ostream/sentry T ~sentry cpp/io/basic_istream/sentry (T... args) T operator bool cpp/io/basic_istream/sentry (T... args) T sentry cpp/io/basic_istream/sentry (T... args) std::basic_fstream::event_callback cpp/io/ios_base/event_callback std::basic_fstream::failure cpp/io/ios_base/failure T failure cpp/io/ios_base/failure (T... args) T what cpp/error/exception/what (T... args) std::stringbuf cpp/io/basic_stringbuf T pptr cpp/io/basic_streambuf/pptr (T... args) T epptr cpp/io/basic_streambuf/pptr (T... args) T eback cpp/io/basic_streambuf/gptr (T... args) T setp cpp/io/basic_streambuf/setp (T... args) T sputbackc cpp/io/basic_streambuf/sputbackc (T... args) T sgetc cpp/io/basic_streambuf/sgetc (T... args) T stringbuf cpp/io/basic_stringbuf/basic_stringbuf (T... args) T sungetc cpp/io/basic_streambuf/sungetc (T... args) T pubseekoff cpp/io/basic_streambuf/pubseekoff (T... args) T seekoff cpp/io/basic_streambuf/pubseekoff (T... args) T str cpp/io/basic_stringbuf/str (T... args) T sync cpp/io/basic_streambuf/pubsync (T... args) T xsputn cpp/io/basic_streambuf/sputn (T... args) T pbase cpp/io/basic_streambuf/pptr (T... args) T pubimbue cpp/io/basic_streambuf/pubimbue (T... args) T showmanyc cpp/io/basic_streambuf/showmanyc (T... args) T egptr cpp/io/basic_streambuf/gptr (T... args) T seekpos cpp/io/basic_streambuf/pubseekpos (T... args) T underflow cpp/io/basic_streambuf/underflow (T... args) T setbuf cpp/io/basic_streambuf/pubsetbuf (T... args) T gbump cpp/io/basic_streambuf/gbump (T... args) T in_avail cpp/io/basic_streambuf/in_avail (T... args) T swap cpp/io/basic_streambuf/swap (T... args) T pbackfail cpp/io/basic_streambuf/pbackfail (T... args) T sputc cpp/io/basic_streambuf/sputc (T... args) T xsgetn cpp/io/basic_streambuf/sgetn (T... args) T uflow cpp/io/basic_streambuf/uflow (T... args) T gptr cpp/io/basic_streambuf/gptr (T... args) T sputn cpp/io/basic_streambuf/sputn (T... args) T sgetn cpp/io/basic_streambuf/sgetn (T... args) T sbumpc cpp/io/basic_streambuf/sbumpc (T... args) T overflow cpp/io/basic_streambuf/overflow (T... args) T operator= cpp/io/basic_stringbuf/operator= (T... args) T pbump cpp/io/basic_streambuf/pbump (T... args) T pubsetbuf cpp/io/basic_streambuf/pubsetbuf (T... args) T pubsync cpp/io/basic_streambuf/pubsync (T... args) T imbue cpp/io/basic_streambuf/pubimbue (T... args) T setg cpp/io/basic_streambuf/setg (T... args) T snextc cpp/io/basic_streambuf/snextc (T... args) T getloc cpp/io/basic_streambuf/getloc (T... args) T pubseekpos cpp/io/basic_streambuf/pubseekpos (T... args) std::exponential_distribution cpp/numeric/random/exponential_distribution T exponential_distribution cpp/numeric/random/exponential_distribution/exponential_distribution (T... args) T min cpp/numeric/random/exponential_distribution/min (T... args) T max cpp/numeric/random/exponential_distribution/max (T... args) T operator() cpp/numeric/random/exponential_distribution/operator() (T... args) T param cpp/numeric/random/exponential_distribution/param (T... args) T reset cpp/numeric/random/exponential_distribution/reset (T... args) T lambda cpp/numeric/random/exponential_distribution/lambda (T... args) std::uint32_t cpp/types/integer std::wcregex_iterator cpp/regex/regex_iterator T operator!= cpp/regex/regex_iterator/operator_cmp (T... args) T operator= cpp/regex/regex_iterator/operator= (T... args) T operator== cpp/regex/regex_iterator/operator_cmp (T... args) T operator-> cpp/regex/regex_iterator/operator* (T... args) T operator++ cpp/regex/regex_iterator/operator_arith (T... args) T operator* cpp/regex/regex_iterator/operator* (T... args) T wcregex_iterator cpp/regex/regex_iterator/regex_iterator (T... args) T operator++(int) cpp/regex/regex_iterator/operator_arith (T... args) std::bad_function_call cpp/utility/functional/bad_function_call T bad_function_call cpp/utility/functional/bad_function_call (T... args) T what cpp/error/exception/what (T... args) std::false_type cpp/types/integral_constant std::wregex cpp/regex/basic_regex T wregex cpp/regex/basic_regex/basic_regex (T... args) T swap cpp/regex/basic_regex/swap (T... args) T imbue cpp/regex/basic_regex/imbue (T... args) T assign cpp/regex/basic_regex/assign (T... args) T ~wregex cpp/regex/basic_regex/~basic_regex (T... args) T operator= cpp/regex/basic_regex/operator= (T... args) T mark_count cpp/regex/basic_regex/mark_count (T... args) T getloc cpp/regex/basic_regex/getloc (T... args) T flags cpp/regex/basic_regex/flags (T... args) std::uint_least8_t cpp/types/integer std::uniform_real_distribution cpp/numeric/random/uniform_real_distribution T uniform_real_distribution cpp/numeric/random/uniform_real_distribution/uniform_real_distribution (T... args) T reset cpp/numeric/random/uniform_real_distribution/reset (T... args) T a cpp/numeric/random/uniform_real_distribution/params (T... args) T max cpp/numeric/random/uniform_real_distribution/max (T... args) T param cpp/numeric/random/uniform_real_distribution/param (T... args) T min cpp/numeric/random/uniform_real_distribution/min (T... args) T b cpp/numeric/random/uniform_real_distribution/params (T... args) std::smatch cpp/regex/match_results T smatch cpp/regex/match_results/match_results (T... args) T cbegin cpp/regex/match_results/begin (T... args) T format cpp/regex/match_results/format (T... args) T size cpp/regex/match_results/size (T... args) T swap cpp/regex/match_results/swap (T... args) T position cpp/regex/match_results/position (T... args) T ~smatch cpp/regex/match_results/~match_results (T... args) T prefix cpp/regex/match_results/prefix (T... args) T str cpp/regex/match_results/str (T... args) T empty cpp/regex/match_results/empty (T... args) T suffix cpp/regex/match_results/suffix (T... args) T get_allocator cpp/regex/match_results/get_allocator (T... args) T end cpp/regex/match_results/end (T... args) T max_size cpp/regex/match_results/max_size (T... args) T ready cpp/regex/match_results/ready (T... args) T cend cpp/regex/match_results/end (T... args) T operator[] cpp/regex/match_results/operator_at (T... args) T length cpp/regex/match_results/length (T... args) T begin cpp/regex/match_results/begin (T... args) std::cregex_token_iterator cpp/regex/regex_token_iterator T operator!= cpp/regex/regex_token_iterator/operator_cmp (T... args) T operator= cpp/regex/regex_token_iterator/operator= (T... args) T operator== cpp/regex/regex_token_iterator/operator_cmp (T... args) T operator-> cpp/regex/regex_token_iterator/operator* (T... args) T cregex_token_iterator cpp/regex/regex_token_iterator/regex_token_iterator (T... args) T operator++ cpp/regex/regex_token_iterator/operator_arith (T... args) T operator* cpp/regex/regex_token_iterator/operator* (T... args) T operator++(int) cpp/regex/regex_token_iterator/operator_arith (T... args) std::range_error cpp/error/range_error T range_error cpp/error/range_error (T... args) T what cpp/error/exception/what (T... args) std::is_assignable cpp/types/is_assignable std::is_copy_assignable cpp/types/is_copy_assignable std::invalid_argument cpp/error/invalid_argument T invalid_argument cpp/error/invalid_argument (T... args) T what cpp/error/exception/what (T... args) std::is_unsigned cpp/types/is_unsigned std::jmp_buf cpp/utility/program/jmp_buf std::is_class cpp/types/is_class std::geometric_distribution cpp/numeric/random/geometric_distribution T p cpp/numeric/random/geometric_distribution/p (T... args) T reset cpp/numeric/random/geometric_distribution/reset (T... args) T max cpp/numeric/random/geometric_distribution/max (T... args) T geometric_distribution cpp/numeric/random/geometric_distribution/geometric_distribution (T... args) T param cpp/numeric/random/geometric_distribution/param (T... args) T min cpp/numeric/random/geometric_distribution/min (T... args) std::uint_fast8_t cpp/types/integer std::mersenne_twister_engine cpp/numeric/random/mersenne_twister_engine T discard cpp/numeric/random/mersenne_twister_engine/discard (T... args) T max cpp/numeric/random/mersenne_twister_engine/max (T... args) T operator() cpp/numeric/random/mersenne_twister_engine/operator() (T... args) T mersenne_twister_engine cpp/numeric/random/mersenne_twister_engine/mersenne_twister_engine (T... args) T seed cpp/numeric/random/mersenne_twister_engine/seed (T... args) T min cpp/numeric/random/mersenne_twister_engine/min (T... args) std::is_arithmetic cpp/types/is_arithmetic std::negate cpp/utility/functional/negate T operator() cpp/utility/functional/negate (T... args) std::try_to_lock_t cpp/thread/lock_tag_t std::wfilebuf cpp/io/basic_filebuf T eback cpp/io/basic_streambuf/gptr (T... args) T setp cpp/io/basic_streambuf/setp (T... args) T pbackfail cpp/io/basic_streambuf/pbackfail (T... args) T seekoff cpp/io/basic_streambuf/pubseekoff (T... args) T pbase cpp/io/basic_streambuf/pptr (T... args) T egptr cpp/io/basic_streambuf/gptr (T... args) T underflow cpp/io/basic_streambuf/underflow (T... args) T setbuf cpp/io/basic_streambuf/pubsetbuf (T... args) T gbump cpp/io/basic_streambuf/gbump (T... args) T xsgetn cpp/io/basic_streambuf/sgetn (T... args) T is_open cpp/io/basic_filebuf/is_open (T... args) T sputn cpp/io/basic_streambuf/sputn (T... args) T pptr cpp/io/basic_streambuf/pptr (T... args) T seekpos cpp/io/basic_streambuf/pubseekpos (T... args) T pubsync cpp/io/basic_streambuf/pubsync (T... args) T pubseekoff cpp/io/basic_streambuf/pubseekoff (T... args) T setg cpp/io/basic_streambuf/setg (T... args) T pbump cpp/io/basic_streambuf/pbump (T... args) T pubseekpos cpp/io/basic_streambuf/pubseekpos (T... args) T ~wfilebuf cpp/io/basic_filebuf/~basic_filebuf (T... args) T sputbackc cpp/io/basic_streambuf/sputbackc (T... args) T in_avail cpp/io/basic_streambuf/in_avail (T... args) T getloc cpp/io/basic_streambuf/getloc (T... args) T sungetc cpp/io/basic_streambuf/sungetc (T... args) T wfilebuf cpp/io/basic_filebuf/basic_filebuf (T... args) T epptr cpp/io/basic_streambuf/pptr (T... args) T close cpp/io/basic_filebuf/close (T... args) T sync cpp/io/basic_streambuf/pubsync (T... args) T xsputn cpp/io/basic_streambuf/sputn (T... args) T pubimbue cpp/io/basic_streambuf/pubimbue (T... args) T showmanyc cpp/io/basic_streambuf/showmanyc (T... args) T open cpp/io/basic_filebuf/open (T... args) T sgetc cpp/io/basic_streambuf/sgetc (T... args) T swap cpp/io/basic_streambuf/swap (T... args) T sputc cpp/io/basic_streambuf/sputc (T... args) T overflow cpp/io/basic_streambuf/overflow (T... args) T uflow cpp/io/basic_streambuf/uflow (T... args) T sgetn cpp/io/basic_streambuf/sgetn (T... args) T sbumpc cpp/io/basic_streambuf/sbumpc (T... args) T operator= cpp/io/basic_filebuf/operator= (T... args) T pubsetbuf cpp/io/basic_streambuf/pubsetbuf (T... args) T imbue cpp/io/basic_streambuf/pubimbue (T... args) T snextc cpp/io/basic_streambuf/snextc (T... args) T gptr cpp/io/basic_streambuf/gptr (T... args) std::is_compound cpp/types/is_compound std::iostream cpp/io/basic_iostream T seekp cpp/io/basic_ostream/seekp (T... args) T setstate cpp/io/basic_ios/setstate (T... args) T getloc cpp/io/ios_base/getloc (T... args) T precision cpp/io/ios_base/precision (T... args) T width cpp/io/ios_base/width (T... args) T flags cpp/io/ios_base/flags (T... args) T widen cpp/io/basic_ios/widen (T... args) T operator>> cpp/io/basic_istream/operator_gtgt (T... args) T fill cpp/io/basic_ios/fill (T... args) T setf cpp/io/ios_base/setf (T... args) T seekg cpp/io/basic_istream/seekg (T... args) T good cpp/io/basic_ios/good (T... args) T copyfmt cpp/io/basic_ios/copyfmt (T... args) T tellp cpp/io/basic_ostream/tellp (T... args) T sync_with_stdio cpp/io/ios_base/sync_with_stdio (T... args) T gcount cpp/io/basic_istream/gcount (T... args) T unget cpp/io/basic_istream/unget (T... args) T xalloc cpp/io/ios_base/xalloc (T... args) T read cpp/io/basic_istream/read (T... args) T getline cpp/io/basic_istream/getline (T... args) T eof cpp/io/basic_ios/eof (T... args) T ~iostream cpp/io/basic_iostream/~basic_iostream (T... args) T exceptions cpp/io/basic_ios/exceptions (T... args) std::iostream::sentry T register_callback cpp/io/ios_base/register_callback (T... args) T operator<< cpp/io/basic_ostream/operator_ltlt (T... args) std::iostream::event_callback T narrow cpp/io/basic_ios/narrow (T... args) T operator bool cpp/io/basic_ios/operator_bool (T... args) T write cpp/io/basic_ostream/write (T... args) T sync cpp/io/basic_istream/sync (T... args) T putback cpp/io/basic_istream/putback (T... args) T ignore cpp/io/basic_istream/ignore (T... args) T unsetf cpp/io/ios_base/unsetf (T... args) T readsome cpp/io/basic_istream/readsome (T... args) T rdstate cpp/io/basic_ios/rdstate (T... args) T tie cpp/io/basic_ios/tie (T... args) std::iostream::failure T move cpp/io/basic_ios/move (T... args) T get cpp/io/basic_istream/get (T... args) T operator! cpp/io/basic_ios/operator! (T... args) T pword cpp/io/ios_base/pword (T... args) T swap cpp/io/basic_ios/swap (T... args) T flush cpp/io/basic_ostream/flush (T... args) T tellg cpp/io/basic_istream/tellg (T... args) T set_rdbuf cpp/io/basic_ios/set_rdbuf (T... args) T iostream cpp/io/basic_iostream/basic_iostream (T... args) T fail cpp/io/basic_ios/fail (T... args) T peek cpp/io/basic_istream/peek (T... args) T iword cpp/io/ios_base/iword (T... args) T rdbuf cpp/io/basic_ios/rdbuf (T... args) T imbue cpp/io/basic_ios/imbue (T... args) T bad cpp/io/basic_ios/bad (T... args) T clear cpp/io/basic_ios/clear (T... args) T put cpp/io/basic_ostream/put (T... args) T init cpp/io/basic_ios/init (T... args) std::iostream::sentry cpp/io/basic_ostream/sentry T ~sentry cpp/io/basic_istream/sentry (T... args) T operator bool cpp/io/basic_istream/sentry (T... args) T sentry cpp/io/basic_istream/sentry (T... args) std::iostream::event_callback cpp/io/ios_base/event_callback std::iostream::failure cpp/io/ios_base/failure T failure cpp/io/ios_base/failure (T... args) T what cpp/error/exception/what (T... args) std::is_object cpp/types/is_object std::recursive_mutex cpp/thread/recursive_mutex T unlock cpp/thread/recursive_mutex/unlock (T... args) T native_handle cpp/thread/recursive_mutex/native_handle (T... args) T recursive_mutex cpp/thread/recursive_mutex/recursive_mutex (T... args) T lock cpp/thread/recursive_mutex/lock (T... args) T try_lock cpp/thread/recursive_mutex/try_lock (T... args) std::is_copy_constructible cpp/types/is_copy_constructible std::codecvt_utf8_utf16 cpp/locale/codecvt_utf8_utf16 std::codecvt_utf8_utf16::extern_type T out cpp/locale/codecvt/out (T... args) T do_length cpp/locale/codecvt/length (T... args) T do_unshift cpp/locale/codecvt/unshift (T... args) T do_encoding cpp/locale/codecvt/encoding (T... args) T do_in cpp/locale/codecvt/in (T... args) T unshift cpp/locale/codecvt/unshift (T... args) T max_length cpp/locale/codecvt/max_length (T... args) std::codecvt_utf8_utf16::state_type T encoding cpp/locale/codecvt/encoding (T... args) T always_noconv cpp/locale/codecvt/always_noconv (T... args) T do_out cpp/locale/codecvt/out (T... args) T do_max_length cpp/locale/codecvt/max_length (T... args) T do_always_noconv cpp/locale/codecvt/always_noconv (T... args) T in cpp/locale/codecvt/in (T... args) std::codecvt_utf8_utf16::intern_type T length cpp/locale/codecvt/length (T... args) std::codecvt_utf8_utf16::extern_type cpp/locale/codecvt std::codecvt_utf8_utf16::state_type cpp/locale/codecvt std::codecvt_utf8_utf16::intern_type cpp/locale/codecvt std::not_equal_to cpp/utility/functional/not_equal_to T operator() cpp/utility/functional/not_equal_to (T... args) std::is_destructible cpp/types/is_destructible std::int_fast32_t cpp/types/integer std::rank cpp/types/rank std::milli cpp/numeric/ratio/ratio std::deci cpp/numeric/ratio/ratio std::add_lvalue_reference cpp/types/add_reference std::is_bind_expression cpp/utility/functional/is_bind_expression std::ios_base cpp/io/ios_base T register_callback cpp/io/ios_base/register_callback (T... args) T pword cpp/io/ios_base/pword (T... args) T unsetf cpp/io/ios_base/unsetf (T... args) T getloc cpp/io/ios_base/getloc (T... args) T sync_with_stdio cpp/io/ios_base/sync_with_stdio (T... args) T precision cpp/io/ios_base/precision (T... args) T xalloc cpp/io/ios_base/xalloc (T... args) T flags cpp/io/ios_base/flags (T... args) std::ios_base::event_callback std::ios_base::failure T setf cpp/io/ios_base/setf (T... args) T imbue cpp/io/ios_base/imbue (T... args) T width cpp/io/ios_base/width (T... args) T ios_base cpp/io/ios_base/ios_base (T... args) T ~ios_base cpp/io/ios_base/~ios_base (T... args) T iword cpp/io/ios_base/iword (T... args) std::ios_base::event_callback cpp/io/ios_base/event_callback std::ios_base::failure cpp/io/ios_base/failure T failure cpp/io/ios_base/failure (T... args) T what cpp/error/exception/what (T... args) std::ratio_less cpp/numeric/ratio/ratio_less std::int64_t cpp/types/integer std::nullptr_t cpp/types/nullptr_t std::stack cpp/container/stack T operator= cpp/container/stack/operator= (T... args) T swap cpp/container/stack/swap (T... args) T size cpp/container/stack/size (T... args) T empty cpp/container/stack/empty (T... args) T pop cpp/container/stack/pop (T... args) T emplace cpp/container/stack/emplace (T... args) T ~stack cpp/container/stack/~stack (T... args) T top cpp/container/stack/top (T... args) T stack cpp/container/stack/stack (T... args) T push cpp/container/stack/push (T... args) std::uint_fast64_t cpp/types/integer std::is_reference cpp/types/is_reference std::ratio cpp/numeric/ratio/ratio std::shared_future cpp/thread/shared_future T ~shared_future cpp/thread/shared_future/~shared_future (T... args) T operator= cpp/thread/shared_future/operator= (T... args) T wait cpp/thread/shared_future/wait (T... args) T wait_until cpp/thread/shared_future/wait_until (T... args) T wait_for cpp/thread/shared_future/wait_for (T... args) T shared_future cpp/thread/shared_future/shared_future (T... args) T valid cpp/thread/shared_future/valid (T... args) T get cpp/thread/shared_future/get (T... args) std::u16streampos cpp/io/fpos T state cpp/io/fpos/state (T... args) std::wistream cpp/io/basic_istream T setstate cpp/io/basic_ios/setstate (T... args) T getloc cpp/io/ios_base/getloc (T... args) T precision cpp/io/ios_base/precision (T... args) T flags cpp/io/ios_base/flags (T... args) T widen cpp/io/basic_ios/widen (T... args) T seekg cpp/io/basic_istream/seekg (T... args) T operator>> cpp/io/basic_istream/operator_gtgt (T... args) T fill cpp/io/basic_ios/fill (T... args) T setf cpp/io/ios_base/setf (T... args) std::wistream::event_callback T wistream cpp/io/basic_istream/basic_istream (T... args) T operator bool cpp/io/basic_ios/operator_bool (T... args) T copyfmt cpp/io/basic_ios/copyfmt (T... args) T sync_with_stdio cpp/io/ios_base/sync_with_stdio (T... args) T getline cpp/io/basic_istream/getline (T... args) T gcount cpp/io/basic_istream/gcount (T... args) T eof cpp/io/basic_ios/eof (T... args) T xalloc cpp/io/ios_base/xalloc (T... args) T read cpp/io/basic_istream/read (T... args) T exceptions cpp/io/basic_ios/exceptions (T... args) T iword cpp/io/ios_base/iword (T... args) T unget cpp/io/basic_istream/unget (T... args) T rdbuf cpp/io/basic_ios/rdbuf (T... args) T narrow cpp/io/basic_ios/narrow (T... args) T good cpp/io/basic_ios/good (T... args) T operator! cpp/io/basic_ios/operator! (T... args) T sync cpp/io/basic_istream/sync (T... args) T putback cpp/io/basic_istream/putback (T... args) T ~wistream cpp/io/basic_istream/~basic_istream (T... args) T ignore cpp/io/basic_istream/ignore (T... args) T unsetf cpp/io/ios_base/unsetf (T... args) T width cpp/io/ios_base/width (T... args) T rdstate cpp/io/basic_ios/rdstate (T... args) T tie cpp/io/basic_ios/tie (T... args) std::wistream::failure T move cpp/io/basic_ios/move (T... args) T get cpp/io/basic_istream/get (T... args) T register_callback cpp/io/ios_base/register_callback (T... args) T pword cpp/io/ios_base/pword (T... args) T swap cpp/io/basic_ios/swap (T... args) T readsome cpp/io/basic_istream/readsome (T... args) T tellg cpp/io/basic_istream/tellg (T... args) T set_rdbuf cpp/io/basic_ios/set_rdbuf (T... args) T fail cpp/io/basic_ios/fail (T... args) T peek cpp/io/basic_istream/peek (T... args) std::wistream::sentry T imbue cpp/io/basic_ios/imbue (T... args) T bad cpp/io/basic_ios/bad (T... args) T clear cpp/io/basic_ios/clear (T... args) T init cpp/io/basic_ios/init (T... args) std::wistream::event_callback cpp/io/ios_base/event_callback std::wistream::failure cpp/io/ios_base/failure T failure cpp/io/ios_base/failure (T... args) T what cpp/error/exception/what (T... args) std::wistream::sentry cpp/io/basic_istream/sentry T ~sentry cpp/io/basic_istream/sentry (T... args) T operator bool cpp/io/basic_istream/sentry (T... args) T sentry cpp/io/basic_istream/sentry (T... args) std::aligned_storage cpp/types/aligned_storage std::wstreambuf cpp/io/basic_streambuf T pptr cpp/io/basic_streambuf/pptr (T... args) T epptr cpp/io/basic_streambuf/pptr (T... args) T eback cpp/io/basic_streambuf/gptr (T... args) T setp cpp/io/basic_streambuf/setp (T... args) T sputbackc cpp/io/basic_streambuf/sputbackc (T... args) T getloc cpp/io/basic_streambuf/getloc (T... args) T seekoff cpp/io/basic_streambuf/pubseekoff (T... args) T pubseekoff cpp/io/basic_streambuf/pubseekoff (T... args) T sungetc cpp/io/basic_streambuf/sungetc (T... args) T sync cpp/io/basic_streambuf/pubsync (T... args) T xsputn cpp/io/basic_streambuf/sputn (T... args) T pbase cpp/io/basic_streambuf/pptr (T... args) T sgetc cpp/io/basic_streambuf/sgetc (T... args) T pubimbue cpp/io/basic_streambuf/pubimbue (T... args) T showmanyc cpp/io/basic_streambuf/showmanyc (T... args) T egptr cpp/io/basic_streambuf/gptr (T... args) T seekpos cpp/io/basic_streambuf/pubseekpos (T... args) T underflow cpp/io/basic_streambuf/underflow (T... args) T setbuf cpp/io/basic_streambuf/pubsetbuf (T... args) T gbump cpp/io/basic_streambuf/gbump (T... args) T in_avail cpp/io/basic_streambuf/in_avail (T... args) T swap cpp/io/basic_streambuf/swap (T... args) T pbackfail cpp/io/basic_streambuf/pbackfail (T... args) T wstreambuf cpp/io/basic_streambuf/basic_streambuf (T... args) T sputc cpp/io/basic_streambuf/sputc (T... args) T xsgetn cpp/io/basic_streambuf/sgetn (T... args) T uflow cpp/io/basic_streambuf/uflow (T... args) T overflow cpp/io/basic_streambuf/overflow (T... args) T sputn cpp/io/basic_streambuf/sputn (T... args) T sgetn cpp/io/basic_streambuf/sgetn (T... args) T sbumpc cpp/io/basic_streambuf/sbumpc (T... args) T ~wstreambuf cpp/io/basic_streambuf/~basic_streambuf (T... args) T operator= cpp/io/basic_streambuf/operator= (T... args) T pbump cpp/io/basic_streambuf/pbump (T... args) T pubsetbuf cpp/io/basic_streambuf/pubsetbuf (T... args) T pubsync cpp/io/basic_streambuf/pubsync (T... args) T imbue cpp/io/basic_streambuf/pubimbue (T... args) T setg cpp/io/basic_streambuf/setg (T... args) T snextc cpp/io/basic_streambuf/snextc (T... args) T gptr cpp/io/basic_streambuf/gptr (T... args) T pubseekpos cpp/io/basic_streambuf/pubseekpos (T... args) std::binary_function cpp/utility/functional/binary_function std::out_of_range cpp/error/out_of_range T out_of_range cpp/error/out_of_range (T... args) T what cpp/error/exception/what (T... args) std::independent_bits_engine cpp/numeric/random/independent_bits_engine T discard cpp/numeric/random/independent_bits_engine/discard (T... args) T max cpp/numeric/random/independent_bits_engine/max (T... args) T independent_bits_engine cpp/numeric/random/independent_bits_engine/independent_bits_engine (T... args) T operator() cpp/numeric/random/independent_bits_engine/operator() (T... args) T base cpp/numeric/random/independent_bits_engine/base (T... args) T seed cpp/numeric/random/independent_bits_engine/seed (T... args) T min cpp/numeric/random/independent_bits_engine/min (T... args) std::stringstream cpp/io/basic_stringstream T seekp cpp/io/basic_ostream/seekp (T... args) T setstate cpp/io/basic_ios/setstate (T... args) T getloc cpp/io/ios_base/getloc (T... args) T precision cpp/io/ios_base/precision (T... args) T width cpp/io/ios_base/width (T... args) T flags cpp/io/ios_base/flags (T... args) T str cpp/io/basic_stringstream/str (T... args) T widen cpp/io/basic_ios/widen (T... args) T operator>> cpp/io/basic_istream/operator_gtgt (T... args) T fill cpp/io/basic_ios/fill (T... args) T setf cpp/io/ios_base/setf (T... args) T seekg cpp/io/basic_istream/seekg (T... args) T good cpp/io/basic_ios/good (T... args) T stringstream cpp/io/basic_stringstream/basic_stringstream (T... args) T copyfmt cpp/io/basic_ios/copyfmt (T... args) T tellp cpp/io/basic_ostream/tellp (T... args) T sync_with_stdio cpp/io/ios_base/sync_with_stdio (T... args) T gcount cpp/io/basic_istream/gcount (T... args) T unget cpp/io/basic_istream/unget (T... args) T xalloc cpp/io/ios_base/xalloc (T... args) T read cpp/io/basic_istream/read (T... args) T getline cpp/io/basic_istream/getline (T... args) T eof cpp/io/basic_ios/eof (T... args) T exceptions cpp/io/basic_ios/exceptions (T... args) std::stringstream::sentry T register_callback cpp/io/ios_base/register_callback (T... args) T operator<< cpp/io/basic_ostream/operator_ltlt (T... args) std::stringstream::event_callback T narrow cpp/io/basic_ios/narrow (T... args) T operator bool cpp/io/basic_ios/operator_bool (T... args) T write cpp/io/basic_ostream/write (T... args) T sync cpp/io/basic_istream/sync (T... args) T putback cpp/io/basic_istream/putback (T... args) T ignore cpp/io/basic_istream/ignore (T... args) T unsetf cpp/io/ios_base/unsetf (T... args) T readsome cpp/io/basic_istream/readsome (T... args) T rdstate cpp/io/basic_ios/rdstate (T... args) T tie cpp/io/basic_ios/tie (T... args) std::stringstream::failure T move cpp/io/basic_ios/move (T... args) T get cpp/io/basic_istream/get (T... args) T operator! cpp/io/basic_ios/operator! (T... args) T pword cpp/io/ios_base/pword (T... args) T swap cpp/io/basic_ios/swap (T... args) T flush cpp/io/basic_ostream/flush (T... args) T tellg cpp/io/basic_istream/tellg (T... args) T set_rdbuf cpp/io/basic_ios/set_rdbuf (T... args) T fail cpp/io/basic_ios/fail (T... args) T peek cpp/io/basic_istream/peek (T... args) T operator= cpp/io/basic_stringstream/operator= (T... args) T iword cpp/io/ios_base/iword (T... args) T rdbuf cpp/io/basic_ios/rdbuf (T... args) T imbue cpp/io/basic_ios/imbue (T... args) T bad cpp/io/basic_ios/bad (T... args) T clear cpp/io/basic_ios/clear (T... args) T put cpp/io/basic_ostream/put (T... args) T init cpp/io/basic_ios/init (T... args) std::stringstream::sentry cpp/io/basic_ostream/sentry T ~sentry cpp/io/basic_istream/sentry (T... args) T operator bool cpp/io/basic_istream/sentry (T... args) T sentry cpp/io/basic_istream/sentry (T... args) std::stringstream::event_callback cpp/io/ios_base/event_callback std::stringstream::failure cpp/io/ios_base/failure T failure cpp/io/ios_base/failure (T... args) T what cpp/error/exception/what (T... args) std::tera cpp/numeric/ratio/ratio std::recursive_timed_mutex cpp/thread/recursive_timed_mutex T unlock cpp/thread/recursive_timed_mutex/unlock (T... args) T native_handle cpp/thread/recursive_timed_mutex/native_handle (T... args) T try_lock_until cpp/thread/recursive_timed_mutex/try_lock_until (T... args) T try_lock_for cpp/thread/recursive_timed_mutex/try_lock_for (T... args) T recursive_timed_mutex cpp/thread/recursive_timed_mutex/recursive_timed_mutex (T... args) T lock cpp/thread/recursive_timed_mutex/lock (T... args) T try_lock cpp/thread/recursive_timed_mutex/try_lock (T... args) std::nano cpp/numeric/ratio/ratio std::unordered_multimap cpp/container/unordered_multimap T ~unordered_multimap cpp/container/unordered_multimap/~unordered_multimap (T... args) T max_bucket_count cpp/container/unordered_multimap/max_bucket_count (T... args) T bucket_count cpp/container/unordered_multimap/bucket_count (T... args) T cbegin cpp/container/unordered_multimap/begin (T... args) T erase cpp/container/unordered_multimap/erase (T... args) T insert cpp/container/unordered_multimap/insert (T... args) T unordered_multimap cpp/container/unordered_multimap/unordered_multimap (T... args) T max_load_factor cpp/container/unordered_multimap/max_load_factor (T... args) T end cpp/container/unordered_multimap/end (T... args) T emplace_hint cpp/container/unordered_multimap/emplace_hint (T... args) T end(int) cpp/container/unordered_multimap/end2 (T... args) T key_eq cpp/container/unordered_multimap/key_eq (T... args) T hash_function cpp/container/unordered_multimap/hash_function (T... args) T find cpp/container/unordered_multimap/find (T... args) T begin cpp/container/unordered_multimap/begin (T... args) T cbegin(int) cpp/container/unordered_multimap/begin2 (T... args) T swap cpp/container/unordered_multimap/swap (T... args) T begin(int) cpp/container/unordered_multimap/begin2 (T... args) T load_factor cpp/container/unordered_multimap/load_factor (T... args) T size cpp/container/unordered_multimap/size (T... args) T operator= cpp/container/unordered_multimap/operator= (T... args) T cend cpp/container/unordered_multimap/end (T... args) T reserve cpp/container/unordered_multimap/reserve (T... args) T rehash cpp/container/unordered_multimap/rehash (T... args) T bucket cpp/container/unordered_multimap/bucket (T... args) T empty cpp/container/unordered_multimap/empty (T... args) T get_allocator cpp/container/unordered_multimap/get_allocator (T... args) T max_size cpp/container/unordered_multimap/max_size (T... args) T cend(int) cpp/container/unordered_multimap/end2 (T... args) T count cpp/container/unordered_multimap/count (T... args) T clear cpp/container/unordered_multimap/clear (T... args) T equal_range cpp/container/unordered_multimap/equal_range (T... args) T emplace cpp/container/unordered_multimap/emplace (T... args) T bucket_size cpp/container/unordered_multimap/bucket_size (T... args) std::normal_distribution cpp/numeric/random/normal_distribution T min cpp/numeric/random/normal_distribution/min (T... args) T stddev cpp/numeric/random/normal_distribution/params (T... args) T reset cpp/numeric/random/normal_distribution/reset (T... args) T mean cpp/numeric/random/normal_distribution/params (T... args) T max cpp/numeric/random/normal_distribution/max (T... args) T operator() cpp/numeric/random/normal_distribution/operator() (T... args) T param cpp/numeric/random/normal_distribution/param (T... args) T normal_distribution cpp/numeric/random/normal_distribution/normal_distribution (T... args) std::minstd_rand cpp/numeric/random/linear_congruential_engine T discard cpp/numeric/random/linear_congruential_engine/discard (T... args) T minstd_rand cpp/numeric/random/linear_congruential_engine/linear_congruential_engine (T... args) T max cpp/numeric/random/linear_congruential_engine/max (T... args) T operator() cpp/numeric/random/linear_congruential_engine/operator() (T... args) T seed cpp/numeric/random/linear_congruential_engine/seed (T... args) T min cpp/numeric/random/linear_congruential_engine/min (T... args) std::is_signed cpp/types/is_signed std::is_move_constructible cpp/types/is_move_constructible std::unique_ptr cpp/memory/unique_ptr T unique_ptr cpp/memory/unique_ptr/unique_ptr (T... args) T operator= cpp/memory/unique_ptr/operator= (T... args) T swap cpp/memory/unique_ptr/swap (T... args) T operator* cpp/memory/unique_ptr/operator* (T... args) T ~unique_ptr cpp/memory/unique_ptr/~unique_ptr (T... args) T operator-> cpp/memory/unique_ptr/operator* (T... args) T release cpp/memory/unique_ptr/release (T... args) T get_deleter cpp/memory/unique_ptr/get_deleter (T... args) T operator bool cpp/memory/unique_ptr/operator_bool (T... args) T get cpp/memory/unique_ptr/get (T... args) T reset cpp/memory/unique_ptr/reset (T... args) std::is_nothrow_copy_constructible cpp/types/is_copy_constructible std::forward_list cpp/container/forward_list T pop_front cpp/container/forward_list/pop_front (T... args) T unique cpp/container/forward_list/unique (T... args) T sort cpp/container/forward_list/sort (T... args) T cbegin cpp/container/forward_list/begin (T... args) T splice_after cpp/container/forward_list/splice_after (T... args) T reverse cpp/container/forward_list/reverse (T... args) T remove_if cpp/container/forward_list/remove (T... args) T end cpp/container/forward_list/end (T... args) T remove cpp/container/forward_list/remove (T... args) T push_front cpp/container/forward_list/push_front (T... args) T emplace_after cpp/container/forward_list/emplace_after (T... args) T get_allocator cpp/container/forward_list/get_allocator (T... args) T front cpp/container/forward_list/front (T... args) T begin cpp/container/forward_list/begin (T... args) T resize cpp/container/forward_list/resize (T... args) T emplace_front cpp/container/forward_list/emplace_front (T... args) T swap cpp/container/forward_list/swap (T... args) T erase_after cpp/container/forward_list/erase_after (T... args) T assign cpp/container/forward_list/assign (T... args) T forward_list cpp/container/forward_list/forward_list (T... args) T ~forward_list cpp/container/forward_list/~forward_list (T... args) T before_begin cpp/container/forward_list/before_begin (T... args) T cbefore_begin cpp/container/forward_list/before_begin (T... args) T merge cpp/container/forward_list/merge (T... args) T operator= cpp/container/forward_list/operator= (T... args) T insert_after cpp/container/forward_list/insert_after (T... args) T empty cpp/container/forward_list/empty (T... args) T max_size cpp/container/forward_list/max_size (T... args) T cend cpp/container/forward_list/end (T... args) T clear cpp/container/forward_list/clear (T... args) std::errc cpp/error/errc std::lconv cpp/locale/lconv std::strstreambuf cpp/io/strstreambuf T pptr cpp/io/basic_streambuf/pptr (T... args) T epptr cpp/io/basic_streambuf/pptr (T... args) T eback cpp/io/basic_streambuf/gptr (T... args) T setp cpp/io/basic_streambuf/setp (T... args) T sputbackc cpp/io/basic_streambuf/sputbackc (T... args) T sgetc cpp/io/basic_streambuf/sgetc (T... args) T sungetc cpp/io/basic_streambuf/sungetc (T... args) T pubseekoff cpp/io/basic_streambuf/pubseekoff (T... args) T seekoff cpp/io/basic_streambuf/pubseekoff (T... args) T str cpp/io/strstreambuf/str (T... args) T sync cpp/io/basic_streambuf/pubsync (T... args) T xsputn cpp/io/basic_streambuf/sputn (T... args) T pbase cpp/io/basic_streambuf/pptr (T... args) T pubimbue cpp/io/basic_streambuf/pubimbue (T... args) T showmanyc cpp/io/basic_streambuf/showmanyc (T... args) T egptr cpp/io/basic_streambuf/gptr (T... args) T seekpos cpp/io/basic_streambuf/pubseekpos (T... args) T underflow cpp/io/basic_streambuf/underflow (T... args) T setbuf cpp/io/basic_streambuf/pubsetbuf (T... args) T pcount cpp/io/strstreambuf/pcount (T... args) T gbump cpp/io/basic_streambuf/gbump (T... args) T in_avail cpp/io/basic_streambuf/in_avail (T... args) T swap cpp/io/basic_streambuf/swap (T... args) T pbackfail cpp/io/basic_streambuf/pbackfail (T... args) T sputc cpp/io/basic_streambuf/sputc (T... args) T xsgetn cpp/io/basic_streambuf/sgetn (T... args) T uflow cpp/io/basic_streambuf/uflow (T... args) T ~strstreambuf cpp/io/strstreambuf/~strstreambuf (T... args) T gptr cpp/io/basic_streambuf/gptr (T... args) T sputn cpp/io/basic_streambuf/sputn (T... args) T sgetn cpp/io/basic_streambuf/sgetn (T... args) T sbumpc cpp/io/basic_streambuf/sbumpc (T... args) T overflow cpp/io/basic_streambuf/overflow (T... args) T freeze cpp/io/strstreambuf/freeze (T... args) T pbump cpp/io/basic_streambuf/pbump (T... args) T pubsetbuf cpp/io/basic_streambuf/pubsetbuf (T... args) T pubsync cpp/io/basic_streambuf/pubsync (T... args) T strstreambuf cpp/io/strstreambuf/strstreambuf (T... args) T imbue cpp/io/basic_streambuf/pubimbue (T... args) T setg cpp/io/basic_streambuf/setg (T... args) T snextc cpp/io/basic_streambuf/snextc (T... args) T getloc cpp/io/basic_streambuf/getloc (T... args) T pubseekpos cpp/io/basic_streambuf/pubseekpos (T... args) std::locale cpp/locale/locale T name cpp/locale/locale/name (T... args) T combine cpp/locale/locale/combine (T... args) T operator() cpp/locale/locale/operator() (T... args) T classic cpp/locale/locale/classic (T... args) T global cpp/locale/locale/global (T... args) T operator!= cpp/locale/locale/operator_cmp (T... args) T operator= cpp/locale/locale/operator= (T... args) std::locale::facet T operator== cpp/locale/locale/operator_cmp (T... args) T locale cpp/locale/locale/locale (T... args) std::locale::id T ~locale cpp/locale/locale/~locale (T... args) std::locale::facet cpp/locale/locale/facet T facet cpp/locale/locale/facet/facet (T... args) std::locale::id cpp/locale/locale/id T id cpp/locale/locale/id/id (T... args) std::equal_to cpp/utility/functional/equal_to T operator() cpp/utility/functional/equal_to (T... args) std::divides cpp/utility/functional/divides T operator() cpp/utility/functional/divides (T... args) std::collate_byname cpp/locale/collate_byname T hash cpp/locale/collate/hash (T... args) T do_hash cpp/locale/collate/hash (T... args) std::collate_byname::char_type T do_transform cpp/locale/collate/transform (T... args) T transform cpp/locale/collate/transform (T... args) T do_compare cpp/locale/collate/compare (T... args) T ~collate_byname cpp/locale/collate_byname (T... args) std::collate_byname::string_type T collate_byname cpp/locale/collate_byname (T... args) T compare cpp/locale/collate/compare (T... args) std::collate_byname::char_type cpp/locale/collate std::collate_byname::string_type cpp/locale/collate std::domain_error cpp/error/domain_error T domain_error cpp/error/domain_error (T... args) T what cpp/error/exception/what (T... args) std::is_empty cpp/types/is_empty std::is_nothrow_default_constructible cpp/types/is_default_constructible std::ratio_equal cpp/numeric/ratio/ratio_equal std::ostream cpp/io/basic_ostream T seekp cpp/io/basic_ostream/seekp (T... args) T setstate cpp/io/basic_ios/setstate (T... args) T getloc cpp/io/ios_base/getloc (T... args) T precision cpp/io/ios_base/precision (T... args) T flags cpp/io/ios_base/flags (T... args) T widen cpp/io/basic_ios/widen (T... args) T fill cpp/io/basic_ios/fill (T... args) T setf cpp/io/ios_base/setf (T... args) std::ostream::event_callback T ostream cpp/io/basic_ostream/basic_ostream (T... args) T operator bool cpp/io/basic_ios/operator_bool (T... args) T copyfmt cpp/io/basic_ios/copyfmt (T... args) T tellp cpp/io/basic_ostream/tellp (T... args) T sync_with_stdio cpp/io/ios_base/sync_with_stdio (T... args) T ~ostream cpp/io/basic_ostream/~basic_ostream (T... args) T xalloc cpp/io/ios_base/xalloc (T... args) T exceptions cpp/io/basic_ios/exceptions (T... args) T iword cpp/io/ios_base/iword (T... args) T rdbuf cpp/io/basic_ios/rdbuf (T... args) T operator<< cpp/io/basic_ostream/operator_ltlt (T... args) T narrow cpp/io/basic_ios/narrow (T... args) T good cpp/io/basic_ios/good (T... args) T operator! cpp/io/basic_ios/operator! (T... args) T write cpp/io/basic_ostream/write (T... args) T unsetf cpp/io/ios_base/unsetf (T... args) T width cpp/io/ios_base/width (T... args) T rdstate cpp/io/basic_ios/rdstate (T... args) T tie cpp/io/basic_ios/tie (T... args) std::ostream::failure T move cpp/io/basic_ios/move (T... args) T eof cpp/io/basic_ios/eof (T... args) T register_callback cpp/io/ios_base/register_callback (T... args) T pword cpp/io/ios_base/pword (T... args) T swap cpp/io/basic_ios/swap (T... args) T flush cpp/io/basic_ostream/flush (T... args) T set_rdbuf cpp/io/basic_ios/set_rdbuf (T... args) T fail cpp/io/basic_ios/fail (T... args) std::ostream::sentry T imbue cpp/io/basic_ios/imbue (T... args) T bad cpp/io/basic_ios/bad (T... args) T clear cpp/io/basic_ios/clear (T... args) T put cpp/io/basic_ostream/put (T... args) T init cpp/io/basic_ios/init (T... args) std::ostream::event_callback cpp/io/ios_base/event_callback std::ostream::failure cpp/io/ios_base/failure T failure cpp/io/ios_base/failure (T... args) T what cpp/error/exception/what (T... args) std::ostream::sentry cpp/io/basic_ostream/sentry T ~sentry cpp/io/basic_ostream/sentry (T... args) T operator bool cpp/io/basic_ostream/sentry (T... args) T sentry cpp/io/basic_ostream/sentry (T... args) std::streamsize cpp/io/streamsize std::shared_lock cpp/thread/shared_lock T mutex cpp/thread/shared_lock/mutex (T... args) T swap cpp/thread/shared_lock/swap (T... args) T shared_lock cpp/thread/shared_lock/shared_lock (T... args) T try_lock_for cpp/thread/shared_lock/try_lock_for (T... args) T release cpp/thread/shared_lock/release (T... args) T lock cpp/thread/shared_lock/lock (T... args) T operator bool cpp/thread/shared_lock/operator_bool (T... args) T unlock cpp/thread/shared_lock/unlock (T... args) T operator= cpp/thread/shared_lock/operator= (T... args) T ~shared_lock cpp/thread/shared_lock/~shared_lock (T... args) T try_lock_until cpp/thread/shared_lock/try_lock_until (T... args) T try_lock cpp/thread/shared_lock/try_lock (T... args) T owns_lock cpp/thread/shared_lock/owns_lock (T... args) std::uint8_t cpp/types/integer std::enable_shared_from_this cpp/memory/enable_shared_from_this T enable_shared_from_this cpp/memory/enable_shared_from_this/enable_shared_from_this (T... args) T operator= cpp/memory/enable_shared_from_this/operator= (T... args) T shared_from_this cpp/memory/enable_shared_from_this/shared_from_this (T... args) T ~enable_shared_from_this cpp/memory/enable_shared_from_this/~enable_shared_from_this (T... args) std::ptrdiff_t cpp/types/ptrdiff_t std::int_fast8_t cpp/types/integer std::aligned_union cpp/types/aligned_union std::future cpp/thread/future T operator= cpp/thread/future/operator= (T... args) T wait cpp/thread/future/wait (T... args) T wait_until cpp/thread/future/wait_until (T... args) T wait_for cpp/thread/future/wait_for (T... args) T ~future cpp/thread/future/~future (T... args) T share cpp/thread/future/share (T... args) T future cpp/thread/future/future (T... args) T valid cpp/thread/future/valid (T... args) T get cpp/thread/future/get (T... args) std::wcmatch cpp/regex/match_results T wcmatch cpp/regex/match_results/match_results (T... args) T cbegin cpp/regex/match_results/begin (T... args) T format cpp/regex/match_results/format (T... args) T size cpp/regex/match_results/size (T... args) T swap cpp/regex/match_results/swap (T... args) T position cpp/regex/match_results/position (T... args) T prefix cpp/regex/match_results/prefix (T... args) T str cpp/regex/match_results/str (T... args) T empty cpp/regex/match_results/empty (T... args) T suffix cpp/regex/match_results/suffix (T... args) T get_allocator cpp/regex/match_results/get_allocator (T... args) T end cpp/regex/match_results/end (T... args) T max_size cpp/regex/match_results/max_size (T... args) T ~wcmatch cpp/regex/match_results/~match_results (T... args) T ready cpp/regex/match_results/ready (T... args) T cend cpp/regex/match_results/end (T... args) T operator[] cpp/regex/match_results/operator_at (T... args) T length cpp/regex/match_results/length (T... args) T begin cpp/regex/match_results/begin (T... args) std::overflow_error cpp/error/overflow_error T overflow_error cpp/error/overflow_error (T... args) T what cpp/error/exception/what (T... args) std::centi cpp/numeric/ratio/ratio std::wssub_match cpp/regex/sub_match T operator string_type cpp/regex/sub_match/str (T... args) T str cpp/regex/sub_match/str (T... args) T wssub_match cpp/regex/sub_match/sub_match (T... args) T length cpp/regex/sub_match/length (T... args) T compare cpp/regex/sub_match/compare (T... args) std::is_nothrow_move_assignable cpp/types/is_move_assignable std::pair cpp/utility/pair T pair cpp/utility/pair/pair (T... args) T swap cpp/utility/pair/swap (T... args) T operator= cpp/utility/pair/operator= (T... args) std::wsregex_token_iterator cpp/regex/regex_token_iterator T operator!= cpp/regex/regex_token_iterator/operator_cmp (T... args) T operator= cpp/regex/regex_token_iterator/operator= (T... args) T wsregex_token_iterator cpp/regex/regex_token_iterator/regex_token_iterator (T... args) T operator-> cpp/regex/regex_token_iterator/operator* (T... args) T operator++ cpp/regex/regex_token_iterator/operator_arith (T... args) T operator== cpp/regex/regex_token_iterator/operator_cmp (T... args) T operator* cpp/regex/regex_token_iterator/operator* (T... args) T operator++(int) cpp/regex/regex_token_iterator/operator_arith (T... args) std::weibull_distribution cpp/numeric/random/weibull_distribution T reset cpp/numeric/random/weibull_distribution/reset (T... args) T a cpp/numeric/random/weibull_distribution/params (T... args) T max cpp/numeric/random/weibull_distribution/max (T... args) T weibull_distribution cpp/numeric/random/weibull_distribution/weibull_distribution (T... args) T operator() cpp/numeric/random/weibull_distribution/operator() (T... args) T param cpp/numeric/random/weibull_distribution/param (T... args) T min cpp/numeric/random/weibull_distribution/min (T... args) T b cpp/numeric/random/weibull_distribution/params (T... args) std::less cpp/utility/functional/less T operator() cpp/utility/functional/less (T... args) std::multiplies cpp/utility/functional/multiplies T operator() cpp/utility/functional/multiplies (T... args) std::is_enum cpp/types/is_enum std::unary_function cpp/utility/functional/unary_function std::error_code cpp/error/error_code T value cpp/error/error_code/value (T... args) T operator bool cpp/error/error_code/operator_bool (T... args) T assign cpp/error/error_code/assign (T... args) T operator= cpp/error/error_code/operator= (T... args) T error_code cpp/error/error_code/error_code (T... args) T clear cpp/error/error_code/clear (T... args) T default_error_condition cpp/error/error_code/default_error_condition (T... args) T message cpp/error/error_code/message (T... args) T category cpp/error/error_code/category (T... args) std::yocto cpp/numeric/ratio/ratio std::streampos cpp/io/fpos T state cpp/io/fpos/state (T... args) std::istream_iterator cpp/iterator/istream_iterator std::wifstream cpp/io/basic_ifstream T setstate cpp/io/basic_ios/setstate (T... args) T getloc cpp/io/ios_base/getloc (T... args) T precision cpp/io/ios_base/precision (T... args) T flags cpp/io/ios_base/flags (T... args) T widen cpp/io/basic_ios/widen (T... args) T readsome cpp/io/basic_istream/readsome (T... args) T fill cpp/io/basic_ios/fill (T... args) T setf cpp/io/ios_base/setf (T... args) T tie cpp/io/basic_ios/tie (T... args) T open cpp/io/basic_ifstream/open (T... args) T operator bool cpp/io/basic_ios/operator_bool (T... args) T copyfmt cpp/io/basic_ios/copyfmt (T... args) T operator= cpp/io/basic_ifstream/operator= (T... args) T sync_with_stdio cpp/io/ios_base/sync_with_stdio (T... args) T gcount cpp/io/basic_istream/gcount (T... args) T get cpp/io/basic_istream/get (T... args) T xalloc cpp/io/ios_base/xalloc (T... args) T read cpp/io/basic_istream/read (T... args) T getline cpp/io/basic_istream/getline (T... args) T exceptions cpp/io/basic_ios/exceptions (T... args) T iword cpp/io/ios_base/iword (T... args) T unget cpp/io/basic_istream/unget (T... args) std::wifstream::event_callback T narrow cpp/io/basic_ios/narrow (T... args) T good cpp/io/basic_ios/good (T... args) T operator! cpp/io/basic_ios/operator! (T... args) T close cpp/io/basic_ifstream/close (T... args) T sync cpp/io/basic_istream/sync (T... args) T putback cpp/io/basic_istream/putback (T... args) T ignore cpp/io/basic_istream/ignore (T... args) T unsetf cpp/io/ios_base/unsetf (T... args) T width cpp/io/ios_base/width (T... args) T rdstate cpp/io/basic_ios/rdstate (T... args) T seekg cpp/io/basic_istream/seekg (T... args) std::wifstream::failure T move cpp/io/basic_ios/move (T... args) T eof cpp/io/basic_ios/eof (T... args) T register_callback cpp/io/ios_base/register_callback (T... args) T pword cpp/io/ios_base/pword (T... args) T swap cpp/io/basic_ios/swap (T... args) T tellg cpp/io/basic_istream/tellg (T... args) T operator>> cpp/io/basic_istream/operator_gtgt (T... args) T set_rdbuf cpp/io/basic_ios/set_rdbuf (T... args) T fail cpp/io/basic_ios/fail (T... args) T is_open cpp/io/basic_ifstream/is_open (T... args) T peek cpp/io/basic_istream/peek (T... args) T wifstream cpp/io/basic_ifstream/basic_ifstream (T... args) std::wifstream::sentry T rdbuf cpp/io/basic_ios/rdbuf (T... args) T imbue cpp/io/basic_ios/imbue (T... args) T bad cpp/io/basic_ios/bad (T... args) T clear cpp/io/basic_ios/clear (T... args) T init cpp/io/basic_ios/init (T... args) std::wifstream::event_callback cpp/io/ios_base/event_callback std::wifstream::failure cpp/io/ios_base/failure T failure cpp/io/ios_base/failure (T... args) T what cpp/error/exception/what (T... args) std::wifstream::sentry cpp/io/basic_istream/sentry T ~sentry cpp/io/basic_istream/sentry (T... args) T operator bool cpp/io/basic_istream/sentry (T... args) T sentry cpp/io/basic_istream/sentry (T... args) std::moneypunct_byname cpp/locale/moneypunct_byname T do_curr_symbol cpp/locale/moneypunct/curr_symbol (T... args) T do_decimal_point cpp/locale/moneypunct/decimal_point (T... args) T thousands_sep cpp/locale/moneypunct/thousands_sep (T... args) T moneypunct_byname cpp/locale/moneypunct_byname (T... args) T curr_symbol cpp/locale/moneypunct/curr_symbol (T... args) T do_thousands_sep cpp/locale/moneypunct/thousands_sep (T... args) T positive_sign cpp/locale/moneypunct/positive_sign (T... args) T frac_digits cpp/locale/moneypunct/frac_digits (T... args) T do_negative_sign cpp/locale/moneypunct/positive_sign (T... args) T pos_format cpp/locale/moneypunct/pos_format (T... args) T do_pos_format cpp/locale/moneypunct/pos_format (T... args) T neg_format cpp/locale/moneypunct/pos_format (T... args) T negative_sign cpp/locale/moneypunct/positive_sign (T... args) T grouping cpp/locale/moneypunct/grouping (T... args) T do_frac_digits cpp/locale/moneypunct/frac_digits (T... args) T decimal_point cpp/locale/moneypunct/decimal_point (T... args) T do_neg_format cpp/locale/moneypunct/pos_format (T... args) std::moneypunct_byname::string_type std::moneypunct_byname::pattern T do_positive_sign cpp/locale/moneypunct/positive_sign (T... args) std::moneypunct_byname::char_type T ~moneypunct_byname cpp/locale/moneypunct_byname (T... args) T do_grouping cpp/locale/moneypunct/grouping (T... args) std::moneypunct_byname::string_type cpp/locale/moneypunct std::moneypunct_byname::pattern cpp/locale/money_base std::moneypunct_byname::char_type cpp/locale/moneypunct std::terminate_handler cpp/error/terminate_handler std::ctype_base cpp/locale/ctype_base std::ctype_base::mask std::ctype_base::mask cpp/locale/ctype_base std::reference_wrapper cpp/utility/functional/reference_wrapper T operator= cpp/utility/functional/reference_wrapper/operator= (T... args) T operator() cpp/utility/functional/reference_wrapper/operator() (T... args) T get cpp/utility/functional/reference_wrapper/get (T... args) T reference_wrapper cpp/utility/functional/reference_wrapper/reference_wrapper (T... args) T operator T& cpp/utility/functional/reference_wrapper/get (T... args) std::ranlux48_base cpp/numeric/random/subtract_with_carry_engine T discard cpp/numeric/random/subtract_with_carry_engine/discard (T... args) T ranlux48_base cpp/numeric/random/subtract_with_carry_engine/subtract_with_carry_engine (T... args) T max cpp/numeric/random/subtract_with_carry_engine/max (T... args) T operator() cpp/numeric/random/subtract_with_carry_engine/operator() (T... args) T seed cpp/numeric/random/subtract_with_carry_engine/seed (T... args) T min cpp/numeric/random/subtract_with_carry_engine/min (T... args) std::bit_not cpp/utility/functional/bit_not T operator() cpp/utility/functional/bit_not (T... args) std::int_fast16_t cpp/types/integer std::error_category cpp/error/error_category T name cpp/error/error_category/name (T... args) T operator!= cpp/error/error_category/operator_cmp (T... args) T operator< cpp/error/error_category/operator_cmp (T... args) T error_category cpp/error/error_category/error_category (T... args) T equivalent cpp/error/error_category/equivalent (T... args) T operator== cpp/error/error_category/operator_cmp (T... args) T ~error_category cpp/error/error_category/~error_category (T... args) T default_error_condition cpp/error/error_category/default_error_condition (T... args) T message cpp/error/error_category/message (T... args) std::regex_traits cpp/regex/regex_traits T value cpp/regex/regex_traits/value (T... args) T lookup_collatename cpp/regex/regex_traits/lookup_collatename (T... args) T isctype cpp/regex/regex_traits/isctype (T... args) T getloc cpp/regex/regex_traits/getloc (T... args) T regex_traits cpp/regex/regex_traits/regex_traits (T... args) T transform_primary cpp/regex/regex_traits/transform_primary (T... args) T translate cpp/regex/regex_traits/translate (T... args) T imbue cpp/regex/regex_traits/imbue (T... args) T lookup_classname cpp/regex/regex_traits/lookup_classname (T... args) T transform cpp/regex/regex_traits/transform (T... args) T length cpp/regex/regex_traits/length (T... args) T translate_nocase cpp/regex/regex_traits/translate_nocase (T... args) std::regex_constants std::negative_binomial_distribution cpp/numeric/random/negative_binomial_distribution T p cpp/numeric/random/negative_binomial_distribution/params (T... args) T negative_binomial_distribution cpp/numeric/random/negative_binomial_distribution/negative_binomial_distribution (T... args) T min cpp/numeric/random/negative_binomial_distribution/min (T... args) T max cpp/numeric/random/negative_binomial_distribution/max (T... args) T param cpp/numeric/random/negative_binomial_distribution/param (T... args) T reset cpp/numeric/random/negative_binomial_distribution/reset (T... args) T k cpp/numeric/random/negative_binomial_distribution/params (T... args) std::is_union cpp/types/is_union std::mt19937 cpp/numeric/random/mersenne_twister_engine T seed cpp/numeric/random/mersenne_twister_engine/seed (T... args) T discard cpp/numeric/random/mersenne_twister_engine/discard (T... args) T operator() cpp/numeric/random/mersenne_twister_engine/operator() (T... args) T mt19937 cpp/numeric/random/mersenne_twister_engine/mersenne_twister_engine (T... args) T max cpp/numeric/random/mersenne_twister_engine/max (T... args) T min cpp/numeric/random/mersenne_twister_engine/min (T... args) std::enable_if cpp/types/enable_if std::chi_squared_distribution cpp/numeric/random/chi_squared_distribution T n cpp/numeric/random/chi_squared_distribution/n (T... args) T reset cpp/numeric/random/chi_squared_distribution/reset (T... args) T max cpp/numeric/random/chi_squared_distribution/max (T... args) T operator() cpp/numeric/random/chi_squared_distribution/operator() (T... args) T param cpp/numeric/random/chi_squared_distribution/param (T... args) T min cpp/numeric/random/chi_squared_distribution/min (T... args) T chi_squared_distribution cpp/numeric/random/chi_squared_distribution/chi_squared_distribution (T... args) std::add_rvalue_reference cpp/types/add_reference std::basic_istream cpp/io/basic_istream T setstate cpp/io/basic_ios/setstate (T... args) T getloc cpp/io/ios_base/getloc (T... args) T precision cpp/io/ios_base/precision (T... args) T flags cpp/io/ios_base/flags (T... args) T widen cpp/io/basic_ios/widen (T... args) T seekg cpp/io/basic_istream/seekg (T... args) T operator>> cpp/io/basic_istream/operator_gtgt (T... args) T fill cpp/io/basic_ios/fill (T... args) T setf cpp/io/ios_base/setf (T... args) std::basic_istream::event_callback T operator bool cpp/io/basic_ios/operator_bool (T... args) T copyfmt cpp/io/basic_ios/copyfmt (T... args) T sync_with_stdio cpp/io/ios_base/sync_with_stdio (T... args) T getline cpp/io/basic_istream/getline (T... args) T putback cpp/io/basic_istream/putback (T... args) T gcount cpp/io/basic_istream/gcount (T... args) T eof cpp/io/basic_ios/eof (T... args) T xalloc cpp/io/ios_base/xalloc (T... args) T read cpp/io/basic_istream/read (T... args) T basic_istream cpp/io/basic_istream/basic_istream (T... args) T iword cpp/io/ios_base/iword (T... args) T unget cpp/io/basic_istream/unget (T... args) T rdbuf cpp/io/basic_ios/rdbuf (T... args) T narrow cpp/io/basic_ios/narrow (T... args) T good cpp/io/basic_ios/good (T... args) T operator! cpp/io/basic_ios/operator! (T... args) T sync cpp/io/basic_istream/sync (T... args) T ~basic_istream cpp/io/basic_istream/~basic_istream (T... args) T ignore cpp/io/basic_istream/ignore (T... args) T unsetf cpp/io/ios_base/unsetf (T... args) T width cpp/io/ios_base/width (T... args) T rdstate cpp/io/basic_ios/rdstate (T... args) T tie cpp/io/basic_ios/tie (T... args) std::basic_istream::failure T move cpp/io/basic_ios/move (T... args) T get cpp/io/basic_istream/get (T... args) T register_callback cpp/io/ios_base/register_callback (T... args) T pword cpp/io/ios_base/pword (T... args) T swap cpp/io/basic_ios/swap (T... args) T readsome cpp/io/basic_istream/readsome (T... args) T tellg cpp/io/basic_istream/tellg (T... args) T set_rdbuf cpp/io/basic_ios/set_rdbuf (T... args) T exceptions cpp/io/basic_ios/exceptions (T... args) T fail cpp/io/basic_ios/fail (T... args) T peek cpp/io/basic_istream/peek (T... args) std::basic_istream::sentry T imbue cpp/io/basic_ios/imbue (T... args) T bad cpp/io/basic_ios/bad (T... args) T clear cpp/io/basic_ios/clear (T... args) T init cpp/io/basic_ios/init (T... args) std::basic_istream::event_callback cpp/io/ios_base/event_callback std::basic_istream::failure cpp/io/ios_base/failure T failure cpp/io/ios_base/failure (T... args) T what cpp/error/exception/what (T... args) std::basic_istream::sentry cpp/io/basic_istream/sentry T ~sentry cpp/io/basic_istream/sentry (T... args) T operator bool cpp/io/basic_istream/sentry (T... args) T sentry cpp/io/basic_istream/sentry (T... args) std::ostream_iterator cpp/iterator/ostream_iterator std::is_trivially_copy_assignable cpp/types/is_copy_assignable std::clog cpp/io/basic_ostream std::is_scalar cpp/types/is_scalar std::uses_allocator cpp/memory/uses_allocator std::piecewise_linear_distribution cpp/numeric/random/piecewise_linear_distribution T piecewise_linear_distribution cpp/numeric/random/piecewise_linear_distribution/piecewise_linear_distribution (T... args) T densities cpp/numeric/random/piecewise_linear_distribution/params (T... args) T intervals cpp/numeric/random/piecewise_linear_distribution/params (T... args) T reset cpp/numeric/random/piecewise_linear_distribution/reset (T... args) T max cpp/numeric/random/piecewise_linear_distribution/max (T... args) T operator() cpp/numeric/random/piecewise_linear_distribution/operator() (T... args) T param cpp/numeric/random/piecewise_linear_distribution/param (T... args) T min cpp/numeric/random/piecewise_linear_distribution/min (T... args) std::hash cpp/utility/hash T hash cpp/utility/hash/hash (T... args) T operator() cpp/utility/hash/operator() (T... args) std::shuffle_order_engine cpp/numeric/random/shuffle_order_engine T discard cpp/numeric/random/shuffle_order_engine/discard (T... args) T shuffle_order_engine cpp/numeric/random/shuffle_order_engine/shuffle_order_engine (T... args) T max cpp/numeric/random/shuffle_order_engine/max (T... args) T operator() cpp/numeric/random/shuffle_order_engine/operator() (T... args) T base cpp/numeric/random/shuffle_order_engine/base (T... args) T seed cpp/numeric/random/shuffle_order_engine/seed (T... args) T min cpp/numeric/random/shuffle_order_engine/min (T... args) std::chrono std::chrono::minutes T time_point_cast cpp/chrono/time_point/time_point_cast (T... args) std::chrono::seconds std::chrono::treat_as_floating_point std::chrono::duration std::chrono::milliseconds std::chrono::steady_clock std::chrono::system_clock std::chrono::hours std::chrono::time_point std::chrono::high_resolution_clock std::chrono::duration_values std::chrono::microseconds std::chrono::nanoseconds T duration_cast cpp/chrono/duration/duration_cast (T... args) std::chrono::minutes cpp/chrono/duration T operator--(int) cpp/chrono/duration/operator_arith2 (T... args) T minutes cpp/chrono/duration/duration (T... args) T zero cpp/chrono/duration/zero (T... args) T operator-- cpp/chrono/duration/operator_arith2 (T... args) T operator+= cpp/chrono/duration/operator_arith3 (T... args) T operator- cpp/chrono/duration/operator_arith (T... args) T operator/= cpp/chrono/duration/operator_arith3 (T... args) T operator++ cpp/chrono/duration/operator_arith2 (T... args) T operator++(int) cpp/chrono/duration/operator_arith2 (T... args) T operator= cpp/chrono/duration/operator= (T... args) T operator*= cpp/chrono/duration/operator_arith3 (T... args) T min cpp/chrono/duration/min (T... args) T count cpp/chrono/duration/count (T... args) T operator%= cpp/chrono/duration/operator_arith3 (T... args) T max cpp/chrono/duration/max (T... args) T operator+ cpp/chrono/duration/operator_arith (T... args) T operator-= cpp/chrono/duration/operator_arith3 (T... args) std::chrono::seconds cpp/chrono/duration T operator--(int) cpp/chrono/duration/operator_arith2 (T... args) T zero cpp/chrono/duration/zero (T... args) T operator-- cpp/chrono/duration/operator_arith2 (T... args) T count cpp/chrono/duration/count (T... args) T operator+= cpp/chrono/duration/operator_arith3 (T... args) T operator- cpp/chrono/duration/operator_arith (T... args) T operator/= cpp/chrono/duration/operator_arith3 (T... args) T operator++ cpp/chrono/duration/operator_arith2 (T... args) T operator++(int) cpp/chrono/duration/operator_arith2 (T... args) T operator= cpp/chrono/duration/operator= (T... args) T operator*= cpp/chrono/duration/operator_arith3 (T... args) T min cpp/chrono/duration/min (T... args) T max cpp/chrono/duration/max (T... args) T operator%= cpp/chrono/duration/operator_arith3 (T... args) T seconds cpp/chrono/duration/duration (T... args) T operator+ cpp/chrono/duration/operator_arith (T... args) T operator-= cpp/chrono/duration/operator_arith3 (T... args) std::chrono::treat_as_floating_point cpp/chrono/treat_as_floating_point std::chrono::duration cpp/chrono/duration T operator--(int) cpp/chrono/duration/operator_arith2 (T... args) T zero cpp/chrono/duration/zero (T... args) T operator-- cpp/chrono/duration/operator_arith2 (T... args) T count cpp/chrono/duration/count (T... args) T operator+= cpp/chrono/duration/operator_arith3 (T... args) T duration cpp/chrono/duration/duration (T... args) T operator/= cpp/chrono/duration/operator_arith3 (T... args) T operator++ cpp/chrono/duration/operator_arith2 (T... args) T operator++(int) cpp/chrono/duration/operator_arith2 (T... args) T operator= cpp/chrono/duration/operator= (T... args) T operator*= cpp/chrono/duration/operator_arith3 (T... args) T min cpp/chrono/duration/min (T... args) T operator- cpp/chrono/duration/operator_arith (T... args) T operator%= cpp/chrono/duration/operator_arith3 (T... args) T max cpp/chrono/duration/max (T... args) T operator+ cpp/chrono/duration/operator_arith (T... args) T operator-= cpp/chrono/duration/operator_arith3 (T... args) std::chrono::milliseconds cpp/chrono/duration T operator--(int) cpp/chrono/duration/operator_arith2 (T... args) T zero cpp/chrono/duration/zero (T... args) T operator-- cpp/chrono/duration/operator_arith2 (T... args) T operator+= cpp/chrono/duration/operator_arith3 (T... args) T operator- cpp/chrono/duration/operator_arith (T... args) T operator/= cpp/chrono/duration/operator_arith3 (T... args) T operator++ cpp/chrono/duration/operator_arith2 (T... args) T milliseconds cpp/chrono/duration/duration (T... args) T operator++(int) cpp/chrono/duration/operator_arith2 (T... args) T operator= cpp/chrono/duration/operator= (T... args) T operator*= cpp/chrono/duration/operator_arith3 (T... args) T min cpp/chrono/duration/min (T... args) T count cpp/chrono/duration/count (T... args) T operator%= cpp/chrono/duration/operator_arith3 (T... args) T max cpp/chrono/duration/max (T... args) T operator+ cpp/chrono/duration/operator_arith (T... args) T operator-= cpp/chrono/duration/operator_arith3 (T... args) std::chrono::steady_clock cpp/chrono/steady_clock T now cpp/chrono/steady_clock/now (T... args) std::chrono::system_clock cpp/chrono/system_clock T now cpp/chrono/system_clock/now (T... args) T to_time_t cpp/chrono/system_clock/to_time_t (T... args) T from_time_t cpp/chrono/system_clock/from_time_t (T... args) std::chrono::hours cpp/chrono/duration T operator--(int) cpp/chrono/duration/operator_arith2 (T... args) T zero cpp/chrono/duration/zero (T... args) T operator-- cpp/chrono/duration/operator_arith2 (T... args) T operator+= cpp/chrono/duration/operator_arith3 (T... args) T operator- cpp/chrono/duration/operator_arith (T... args) T operator/= cpp/chrono/duration/operator_arith3 (T... args) T operator++ cpp/chrono/duration/operator_arith2 (T... args) T operator++(int) cpp/chrono/duration/operator_arith2 (T... args) T operator= cpp/chrono/duration/operator= (T... args) T operator*= cpp/chrono/duration/operator_arith3 (T... args) T hours cpp/chrono/duration/duration (T... args) T min cpp/chrono/duration/min (T... args) T count cpp/chrono/duration/count (T... args) T operator%= cpp/chrono/duration/operator_arith3 (T... args) T max cpp/chrono/duration/max (T... args) T operator+ cpp/chrono/duration/operator_arith (T... args) T operator-= cpp/chrono/duration/operator_arith3 (T... args) std::chrono::time_point cpp/chrono/time_point T time_since_epoch cpp/chrono/time_point/time_since_epoch (T... args) T min cpp/chrono/time_point/min (T... args) T operator- cpp/chrono/time_point/operator_arith (T... args) T max cpp/chrono/time_point/max (T... args) T operator+ cpp/chrono/time_point/operator_arith (T... args) T time_point cpp/chrono/time_point/time_point (T... args) std::chrono::high_resolution_clock cpp/chrono/high_resolution_clock T now cpp/chrono/high_resolution_clock/now (T... args) std::chrono::duration_values cpp/chrono/duration_values T max cpp/chrono/duration_values/max (T... args) T zero cpp/chrono/duration_values/zero (T... args) T min cpp/chrono/duration_values/min (T... args) std::chrono::microseconds cpp/chrono/duration T operator--(int) cpp/chrono/duration/operator_arith2 (T... args) T zero cpp/chrono/duration/zero (T... args) T operator-- cpp/chrono/duration/operator_arith2 (T... args) T count cpp/chrono/duration/count (T... args) T operator+= cpp/chrono/duration/operator_arith3 (T... args) T operator/= cpp/chrono/duration/operator_arith3 (T... args) T operator++ cpp/chrono/duration/operator_arith2 (T... args) T operator++(int) cpp/chrono/duration/operator_arith2 (T... args) T operator= cpp/chrono/duration/operator= (T... args) T operator*= cpp/chrono/duration/operator_arith3 (T... args) T min cpp/chrono/duration/min (T... args) T operator- cpp/chrono/duration/operator_arith (T... args) T operator%= cpp/chrono/duration/operator_arith3 (T... args) T max cpp/chrono/duration/max (T... args) T microseconds cpp/chrono/duration/duration (T... args) T operator+ cpp/chrono/duration/operator_arith (T... args) T operator-= cpp/chrono/duration/operator_arith3 (T... args) std::chrono::nanoseconds cpp/chrono/duration T operator--(int) cpp/chrono/duration/operator_arith2 (T... args) T min cpp/chrono/duration/min (T... args) T zero cpp/chrono/duration/zero (T... args) T operator-- cpp/chrono/duration/operator_arith2 (T... args) T operator+= cpp/chrono/duration/operator_arith3 (T... args) T operator- cpp/chrono/duration/operator_arith (T... args) T operator/= cpp/chrono/duration/operator_arith3 (T... args) T operator++ cpp/chrono/duration/operator_arith2 (T... args) T operator++(int) cpp/chrono/duration/operator_arith2 (T... args) T operator= cpp/chrono/duration/operator= (T... args) T operator*= cpp/chrono/duration/operator_arith3 (T... args) T operator+ cpp/chrono/duration/operator_arith (T... args) T count cpp/chrono/duration/count (T... args) T operator%= cpp/chrono/duration/operator_arith3 (T... args) T max cpp/chrono/duration/max (T... args) T nanoseconds cpp/chrono/duration/duration (T... args) T operator-= cpp/chrono/duration/operator_arith3 (T... args) std::greater cpp/utility/functional/greater T operator() cpp/utility/functional/greater (T... args) std::csub_match cpp/regex/sub_match T csub_match cpp/regex/sub_match/sub_match (T... args) T operator string_type cpp/regex/sub_match/str (T... args) T str cpp/regex/sub_match/str (T... args) T length cpp/regex/sub_match/length (T... args) T compare cpp/regex/sub_match/compare (T... args) std::uintmax_t cpp/types/integer std::remove_pointer cpp/types/remove_pointer std::numeric_limits cpp/types/numeric_limits T lowest cpp/types/numeric_limits/lowest (T... args) T infinity cpp/types/numeric_limits/infinity (T... args) T signaling_NaN cpp/types/numeric_limits/signaling_NaN (T... args) T quiet_NaN cpp/types/numeric_limits/quiet_NaN (T... args) T denorm_min cpp/types/numeric_limits/denorm_min (T... args) T max cpp/types/numeric_limits/max (T... args) T round_error cpp/types/numeric_limits/round_error (T... args) T min cpp/types/numeric_limits/min (T... args) T epsilon cpp/types/numeric_limits/epsilon (T... args) std::add_volatile cpp/types/add_cv std::once_flag cpp/thread/once_flag T once_flag cpp/thread/once_flag (T... args) std::is_literal_type cpp/types/is_literal_type std::money_base cpp/locale/money_base std::money_base::pattern std::money_base::pattern cpp/locale/money_base std::peta cpp/numeric/ratio/ratio std::is_placeholder cpp/utility/functional/is_placeholder std::add_const cpp/types/add_cv std::basic_stringbuf cpp/io/basic_stringbuf T pptr cpp/io/basic_streambuf/pptr (T... args) T epptr cpp/io/basic_streambuf/pptr (T... args) T eback cpp/io/basic_streambuf/gptr (T... args) T setp cpp/io/basic_streambuf/setp (T... args) T sputbackc cpp/io/basic_streambuf/sputbackc (T... args) T sgetc cpp/io/basic_streambuf/sgetc (T... args) T sungetc cpp/io/basic_streambuf/sungetc (T... args) T pubseekoff cpp/io/basic_streambuf/pubseekoff (T... args) T seekoff cpp/io/basic_streambuf/pubseekoff (T... args) T str cpp/io/basic_stringbuf/str (T... args) T sync cpp/io/basic_streambuf/pubsync (T... args) T xsputn cpp/io/basic_streambuf/sputn (T... args) T pbase cpp/io/basic_streambuf/pptr (T... args) T pubimbue cpp/io/basic_streambuf/pubimbue (T... args) T showmanyc cpp/io/basic_streambuf/showmanyc (T... args) T basic_stringbuf cpp/io/basic_stringbuf/basic_stringbuf (T... args) T egptr cpp/io/basic_streambuf/gptr (T... args) T seekpos cpp/io/basic_streambuf/pubseekpos (T... args) T underflow cpp/io/basic_streambuf/underflow (T... args) T setbuf cpp/io/basic_streambuf/pubsetbuf (T... args) T gbump cpp/io/basic_streambuf/gbump (T... args) T in_avail cpp/io/basic_streambuf/in_avail (T... args) T swap cpp/io/basic_streambuf/swap (T... args) T pbackfail cpp/io/basic_streambuf/pbackfail (T... args) T sputc cpp/io/basic_streambuf/sputc (T... args) T xsgetn cpp/io/basic_streambuf/sgetn (T... args) T uflow cpp/io/basic_streambuf/uflow (T... args) T gptr cpp/io/basic_streambuf/gptr (T... args) T sputn cpp/io/basic_streambuf/sputn (T... args) T sgetn cpp/io/basic_streambuf/sgetn (T... args) T sbumpc cpp/io/basic_streambuf/sbumpc (T... args) T overflow cpp/io/basic_streambuf/overflow (T... args) T operator= cpp/io/basic_stringbuf/operator= (T... args) T pbump cpp/io/basic_streambuf/pbump (T... args) T pubsetbuf cpp/io/basic_streambuf/pubsetbuf (T... args) T pubsync cpp/io/basic_streambuf/pubsync (T... args) T imbue cpp/io/basic_streambuf/pubimbue (T... args) T setg cpp/io/basic_streambuf/setg (T... args) T snextc cpp/io/basic_streambuf/snextc (T... args) T getloc cpp/io/basic_streambuf/getloc (T... args) T pubseekpos cpp/io/basic_streambuf/pubseekpos (T... args) std::tm cpp/chrono/c/tm std::is_abstract cpp/types/is_abstract std::deque cpp/container/deque T pop_front cpp/container/deque/pop_front (T... args) T push_back cpp/container/deque/push_back (T... args) T shrink_to_fit cpp/container/deque/shrink_to_fit (T... args) T crbegin cpp/container/deque/rbegin (T... args) T erase cpp/container/deque/erase (T... args) T insert cpp/container/deque/insert (T... args) T ~deque cpp/container/deque/~deque (T... args) T back cpp/container/deque/back (T... args) T end cpp/container/deque/end (T... args) T push_front cpp/container/deque/push_front (T... args) T emplace_back cpp/container/deque/emplace_back (T... args) T pop_back cpp/container/deque/pop_back (T... args) T cbegin cpp/container/deque/begin (T... args) T front cpp/container/deque/front (T... args) T deque cpp/container/deque/deque (T... args) T size cpp/container/deque/size (T... args) T resize cpp/container/deque/resize (T... args) T emplace_front cpp/container/deque/emplace_front (T... args) T rbegin cpp/container/deque/rbegin (T... args) T crend cpp/container/deque/rend (T... args) T assign cpp/container/deque/assign (T... args) T operator= cpp/container/deque/operator= (T... args) T empty cpp/container/deque/empty (T... args) T cend cpp/container/deque/end (T... args) T swap cpp/container/deque/swap (T... args) T max_size cpp/container/deque/max_size (T... args) T rend cpp/container/deque/rend (T... args) T get_allocator cpp/container/deque/get_allocator (T... args) T clear cpp/container/deque/clear (T... args) T at cpp/container/deque/at (T... args) T emplace cpp/container/deque/emplace (T... args) T operator[] cpp/container/deque/operator_at (T... args) T begin cpp/container/deque/begin (T... args) std::allocator cpp/memory/allocator T allocator cpp/memory/allocator/allocator (T... args) T allocate cpp/memory/allocator/allocate (T... args) T destroy cpp/memory/allocator/destroy (T... args) T ~allocator cpp/memory/allocator/~allocator (T... args) T max_size cpp/memory/allocator/max_size (T... args) T address cpp/memory/allocator/address (T... args) T deallocate cpp/memory/allocator/deallocate (T... args) T construct cpp/memory/allocator/construct (T... args) std::scoped_allocator_adaptor cpp/memory/scoped_allocator_adaptor T deallocate cpp/memory/scoped_allocator_adaptor/deallocate (T... args) T scoped_allocator_adaptor cpp/memory/scoped_allocator_adaptor/scoped_allocator_adaptor (T... args) T destroy cpp/memory/scoped_allocator_adaptor/destroy (T... args) T construct cpp/memory/scoped_allocator_adaptor/construct (T... args) T max_size cpp/memory/scoped_allocator_adaptor/max_size (T... args) T inner_allocator cpp/memory/scoped_allocator_adaptor/inner_allocator (T... args) T select_on_container_copy_construction cpp/memory/scoped_allocator_adaptor/select_on_container_copy_construction (T... args) T allocate cpp/memory/scoped_allocator_adaptor/allocate (T... args) T outer_allocator cpp/memory/scoped_allocator_adaptor/outer_allocator (T... args) T ~scoped_allocator_adaptor cpp/memory/scoped_allocator_adaptor/~scoped_allocator_adaptor (T... args) std::ssub_match cpp/regex/sub_match T operator string_type cpp/regex/sub_match/str (T... args) T ssub_match cpp/regex/sub_match/sub_match (T... args) T str cpp/regex/sub_match/str (T... args) T length cpp/regex/sub_match/length (T... args) T compare cpp/regex/sub_match/compare (T... args) std::messages_byname cpp/locale/messages_byname T do_get cpp/locale/messages/get (T... args) std::messages_byname::char_type std::messages_byname::catalog T ~messages_byname cpp/locale/messages_byname (T... args) T messages_byname cpp/locale/messages_byname (T... args) T do_open cpp/locale/messages/open (T... args) T do_close cpp/locale/messages/close (T... args) T open cpp/locale/messages/open (T... args) std::messages_byname::string_type T get cpp/locale/messages/get (T... args) T close cpp/locale/messages/close (T... args) std::messages_byname::char_type cpp/locale/messages std::messages_byname::catalog cpp/locale/messages_base std::messages_byname::string_type cpp/locale/messages std::promise cpp/thread/promise T set_exception cpp/thread/promise/set_exception (T... args) T operator= cpp/thread/promise/operator= (T... args) T swap cpp/thread/promise/swap (T... args) T set_exception_at_thread_exit cpp/thread/promise/set_exception_at_thread_exit (T... args) T set_value cpp/thread/promise/set_value (T... args) T get_future cpp/thread/promise/get_future (T... args) T promise cpp/thread/promise/promise (T... args) T ~promise cpp/thread/promise/~promise (T... args) T set_value_at_thread_exit cpp/thread/promise/set_value_at_thread_exit (T... args) std::add_pointer cpp/types/add_pointer std::uintptr_t cpp/types/integer std::bit_and cpp/utility/functional/bit_and T operator() cpp/utility/functional/bit_and (T... args) std::uniform_int_distribution cpp/numeric/random/uniform_int_distribution T min cpp/numeric/random/uniform_int_distribution/min (T... args) T b cpp/numeric/random/uniform_int_distribution/params (T... args) T a cpp/numeric/random/uniform_int_distribution/params (T... args) T max cpp/numeric/random/uniform_int_distribution/max (T... args) T operator() cpp/numeric/random/uniform_int_distribution/operator() (T... args) T param cpp/numeric/random/uniform_int_distribution/param (T... args) T reset cpp/numeric/random/uniform_int_distribution/reset (T... args) T uniform_int_distribution cpp/numeric/random/uniform_int_distribution/uniform_int_distribution (T... args) std::type_info cpp/types/type_info T operator!= cpp/types/type_info/operator_cmp (T... args) T before cpp/types/type_info/before (T... args) T name cpp/types/type_info/name (T... args) T operator== cpp/types/type_info/operator_cmp (T... args) T hash_code cpp/types/type_info/hash_code (T... args) std::fisher_f_distribution cpp/numeric/random/fisher_f_distribution T fisher_f_distribution cpp/numeric/random/fisher_f_distribution/fisher_f_distribution (T... args) T n cpp/numeric/random/fisher_f_distribution/params (T... args) T reset cpp/numeric/random/fisher_f_distribution/reset (T... args) T m cpp/numeric/random/fisher_f_distribution/params (T... args) T operator() cpp/numeric/random/fisher_f_distribution/operator() (T... args) T max cpp/numeric/random/fisher_f_distribution/max (T... args) T param cpp/numeric/random/fisher_f_distribution/param (T... args) T min cpp/numeric/random/fisher_f_distribution/min (T... args) std::strstream cpp/io/strstream T seekp cpp/io/basic_ostream/seekp (T... args) T setstate cpp/io/basic_ios/setstate (T... args) T getloc cpp/io/ios_base/getloc (T... args) T precision cpp/io/ios_base/precision (T... args) T width cpp/io/ios_base/width (T... args) T flags cpp/io/ios_base/flags (T... args) T str cpp/io/strstream/str (T... args) T widen cpp/io/basic_ios/widen (T... args) T operator>> cpp/io/basic_istream/operator_gtgt (T... args) T fill cpp/io/basic_ios/fill (T... args) T setf cpp/io/ios_base/setf (T... args) T seekg cpp/io/basic_istream/seekg (T... args) T pcount cpp/io/strstream/pcount (T... args) T good cpp/io/basic_ios/good (T... args) T copyfmt cpp/io/basic_ios/copyfmt (T... args) T tellp cpp/io/basic_ostream/tellp (T... args) T sync_with_stdio cpp/io/ios_base/sync_with_stdio (T... args) T gcount cpp/io/basic_istream/gcount (T... args) T unget cpp/io/basic_istream/unget (T... args) T xalloc cpp/io/ios_base/xalloc (T... args) T read cpp/io/basic_istream/read (T... args) T getline cpp/io/basic_istream/getline (T... args) T eof cpp/io/basic_ios/eof (T... args) T exceptions cpp/io/basic_ios/exceptions (T... args) std::strstream::sentry T register_callback cpp/io/ios_base/register_callback (T... args) T operator<< cpp/io/basic_ostream/operator_ltlt (T... args) std::strstream::event_callback T narrow cpp/io/basic_ios/narrow (T... args) T operator bool cpp/io/basic_ios/operator_bool (T... args) T write cpp/io/basic_ostream/write (T... args) T sync cpp/io/basic_istream/sync (T... args) T putback cpp/io/basic_istream/putback (T... args) T ignore cpp/io/basic_istream/ignore (T... args) T unsetf cpp/io/ios_base/unsetf (T... args) T readsome cpp/io/basic_istream/readsome (T... args) T rdstate cpp/io/basic_ios/rdstate (T... args) T tie cpp/io/basic_ios/tie (T... args) std::strstream::failure T move cpp/io/basic_ios/move (T... args) T get cpp/io/basic_istream/get (T... args) T operator! cpp/io/basic_ios/operator! (T... args) T pword cpp/io/ios_base/pword (T... args) T swap cpp/io/basic_ios/swap (T... args) T strstream cpp/io/strstream/strstream (T... args) T flush cpp/io/basic_ostream/flush (T... args) T tellg cpp/io/basic_istream/tellg (T... args) T set_rdbuf cpp/io/basic_ios/set_rdbuf (T... args) T freeze cpp/io/strstream/freeze (T... args) T fail cpp/io/basic_ios/fail (T... args) T peek cpp/io/basic_istream/peek (T... args) T iword cpp/io/ios_base/iword (T... args) T rdbuf cpp/io/basic_ios/rdbuf (T... args) T imbue cpp/io/basic_ios/imbue (T... args) T bad cpp/io/basic_ios/bad (T... args) T clear cpp/io/basic_ios/clear (T... args) T ~strstream cpp/io/strstream/~strstream (T... args) T put cpp/io/basic_ostream/put (T... args) T init cpp/io/basic_ios/init (T... args) std::strstream::sentry cpp/io/basic_ostream/sentry T ~sentry cpp/io/basic_istream/sentry (T... args) T operator bool cpp/io/basic_istream/sentry (T... args) T sentry cpp/io/basic_istream/sentry (T... args) std::strstream::event_callback cpp/io/ios_base/event_callback std::strstream::failure cpp/io/ios_base/failure T failure cpp/io/ios_base/failure (T... args) T what cpp/error/exception/what (T... args) std::time_get_byname cpp/locale/time_get_byname T do_get cpp/locale/time_get/get (T... args) T do_get_monthname cpp/locale/time_get/get_monthname (T... args) T get_weekday cpp/locale/time_get/get_weekday (T... args) T do_get_time cpp/locale/time_get/get_time (T... args) T time_get_byname cpp/locale/time_get_byname (T... args) T do_get_year cpp/locale/time_get/get_year (T... args) std::time_get_byname::iter_type T get_monthname cpp/locale/time_get/get_monthname (T... args) T ~time_get_byname cpp/locale/time_get_byname (T... args) T get_time cpp/locale/time_get/get_time (T... args) std::time_get_byname::char_type T do_get_date cpp/locale/time_get/get_date (T... args) T get_date cpp/locale/time_get/get_date (T... args) T do_date_order cpp/locale/time_get/date_order (T... args) T get_year cpp/locale/time_get/get_year (T... args) T date_order cpp/locale/time_get/date_order (T... args) T get cpp/locale/time_get/get (T... args) T do_get_weekday cpp/locale/time_get/get_weekday (T... args) std::time_get_byname::iter_type cpp/locale/time_get std::time_get_byname::char_type cpp/locale/time_get std::basic_streambuf cpp/io/basic_streambuf T pptr cpp/io/basic_streambuf/pptr (T... args) T epptr cpp/io/basic_streambuf/pptr (T... args) T eback cpp/io/basic_streambuf/gptr (T... args) T setp cpp/io/basic_streambuf/setp (T... args) T sputbackc cpp/io/basic_streambuf/sputbackc (T... args) T getloc cpp/io/basic_streambuf/getloc (T... args) T seekoff cpp/io/basic_streambuf/pubseekoff (T... args) T pubseekoff cpp/io/basic_streambuf/pubseekoff (T... args) T sungetc cpp/io/basic_streambuf/sungetc (T... args) T sync cpp/io/basic_streambuf/pubsync (T... args) T xsputn cpp/io/basic_streambuf/sputn (T... args) T pbase cpp/io/basic_streambuf/pptr (T... args) T sgetc cpp/io/basic_streambuf/sgetc (T... args) T pubimbue cpp/io/basic_streambuf/pubimbue (T... args) T showmanyc cpp/io/basic_streambuf/showmanyc (T... args) T egptr cpp/io/basic_streambuf/gptr (T... args) T seekpos cpp/io/basic_streambuf/pubseekpos (T... args) T underflow cpp/io/basic_streambuf/underflow (T... args) T setbuf cpp/io/basic_streambuf/pubsetbuf (T... args) T gbump cpp/io/basic_streambuf/gbump (T... args) T in_avail cpp/io/basic_streambuf/in_avail (T... args) T swap cpp/io/basic_streambuf/swap (T... args) T basic_streambuf cpp/io/basic_streambuf/basic_streambuf (T... args) T pbackfail cpp/io/basic_streambuf/pbackfail (T... args) T sputc cpp/io/basic_streambuf/sputc (T... args) T xsgetn cpp/io/basic_streambuf/sgetn (T... args) T uflow cpp/io/basic_streambuf/uflow (T... args) T overflow cpp/io/basic_streambuf/overflow (T... args) T sputn cpp/io/basic_streambuf/sputn (T... args) T sgetn cpp/io/basic_streambuf/sgetn (T... args) T sbumpc cpp/io/basic_streambuf/sbumpc (T... args) T operator= cpp/io/basic_streambuf/operator= (T... args) T pbump cpp/io/basic_streambuf/pbump (T... args) T pubsetbuf cpp/io/basic_streambuf/pubsetbuf (T... args) T pubsync cpp/io/basic_streambuf/pubsync (T... args) T imbue cpp/io/basic_streambuf/pubimbue (T... args) T setg cpp/io/basic_streambuf/setg (T... args) T snextc cpp/io/basic_streambuf/snextc (T... args) T gptr cpp/io/basic_streambuf/gptr (T... args) T pubseekpos cpp/io/basic_streambuf/pubseekpos (T... args) T ~basic_streambuf cpp/io/basic_streambuf/~basic_streambuf (T... args) std::is_nothrow_constructible cpp/types/is_constructible std::queue cpp/container/queue T operator= cpp/container/queue/operator= (T... args) T swap cpp/container/queue/swap (T... args) T emplace cpp/container/queue/emplace (T... args) T empty cpp/container/queue/empty (T... args) T ~queue cpp/container/queue/~queue (T... args) T pop cpp/container/queue/pop (T... args) T front cpp/container/queue/front (T... args) T push cpp/container/queue/push (T... args) T queue cpp/container/queue/queue (T... args) T back cpp/container/queue/back (T... args) T size cpp/container/queue/size (T... args) std::is_base_of cpp/types/is_base_of std::intmax_t cpp/types/integer std::ranlux24 cpp/numeric/random/discard_block_engine T discard cpp/numeric/random/discard_block_engine/discard (T... args) T ranlux24 cpp/numeric/random/discard_block_engine/discard_block_engine (T... args) T max cpp/numeric/random/discard_block_engine/max (T... args) T operator() cpp/numeric/random/discard_block_engine/operator() (T... args) T base cpp/numeric/random/discard_block_engine/base (T... args) T seed cpp/numeric/random/discard_block_engine/seed (T... args) T min cpp/numeric/random/discard_block_engine/min (T... args) std::remove_cv cpp/types/remove_cv std::is_trivially_destructible cpp/types/is_destructible std::wcin cpp/io/basic_istream std::atomic cpp/atomic/atomic T store cpp/atomic/atomic/store (T... args) T compare_exchange_strong cpp/atomic/atomic/compare_exchange (T... args) T load cpp/atomic/atomic/load (T... args) T operator--(int) cpp/atomic/atomic/operator_arith (T... args) T operator+= cpp/atomic/atomic/operator_arith2 (T... args) T fetch_or cpp/atomic/atomic/fetch_or (T... args) T fetch_xor cpp/atomic/atomic/fetch_xor (T... args) T operator^= cpp/atomic/atomic/operator_arith2 (T... args) T operator|= cpp/atomic/atomic/operator_arith2 (T... args) T compare_exchange_weak cpp/atomic/atomic/compare_exchange (T... args) T operator-= cpp/atomic/atomic/operator_arith2 (T... args) T fetch_add cpp/atomic/atomic/fetch_add (T... args) T operator&= cpp/atomic/atomic/operator_arith2 (T... args) T operator-- cpp/atomic/atomic/operator_arith (T... args) T atomic cpp/atomic/atomic/atomic (T... args) T fetch_and cpp/atomic/atomic/fetch_and (T... args) T exchange cpp/atomic/atomic/exchange (T... args) T operator T cpp/atomic/atomic/operator_T (T... args) T operator++(int) cpp/atomic/atomic/operator_arith (T... args) T operator= cpp/atomic/atomic/operator= (T... args) T operator++ cpp/atomic/atomic/operator_arith (T... args) T fetch_sub cpp/atomic/atomic/fetch_sub (T... args) T is_lock_free cpp/atomic/atomic/is_lock_free (T... args) std::basic_stringstream cpp/io/basic_stringstream T seekp cpp/io/basic_ostream/seekp (T... args) T setstate cpp/io/basic_ios/setstate (T... args) T getloc cpp/io/ios_base/getloc (T... args) T precision cpp/io/ios_base/precision (T... args) T width cpp/io/ios_base/width (T... args) T flags cpp/io/ios_base/flags (T... args) T str cpp/io/basic_stringstream/str (T... args) T widen cpp/io/basic_ios/widen (T... args) T operator>> cpp/io/basic_istream/operator_gtgt (T... args) T fill cpp/io/basic_ios/fill (T... args) T setf cpp/io/ios_base/setf (T... args) T seekg cpp/io/basic_istream/seekg (T... args) T good cpp/io/basic_ios/good (T... args) T copyfmt cpp/io/basic_ios/copyfmt (T... args) T tellp cpp/io/basic_ostream/tellp (T... args) T sync_with_stdio cpp/io/ios_base/sync_with_stdio (T... args) T gcount cpp/io/basic_istream/gcount (T... args) T unget cpp/io/basic_istream/unget (T... args) T xalloc cpp/io/ios_base/xalloc (T... args) T read cpp/io/basic_istream/read (T... args) T getline cpp/io/basic_istream/getline (T... args) T eof cpp/io/basic_ios/eof (T... args) T basic_stringstream cpp/io/basic_stringstream/basic_stringstream (T... args) T exceptions cpp/io/basic_ios/exceptions (T... args) std::basic_stringstream::sentry T register_callback cpp/io/ios_base/register_callback (T... args) T operator<< cpp/io/basic_ostream/operator_ltlt (T... args) std::basic_stringstream::event_callback T narrow cpp/io/basic_ios/narrow (T... args) T operator bool cpp/io/basic_ios/operator_bool (T... args) T write cpp/io/basic_ostream/write (T... args) T sync cpp/io/basic_istream/sync (T... args) T putback cpp/io/basic_istream/putback (T... args) T ignore cpp/io/basic_istream/ignore (T... args) T unsetf cpp/io/ios_base/unsetf (T... args) T readsome cpp/io/basic_istream/readsome (T... args) T rdstate cpp/io/basic_ios/rdstate (T... args) T tie cpp/io/basic_ios/tie (T... args) std::basic_stringstream::failure T move cpp/io/basic_ios/move (T... args) T get cpp/io/basic_istream/get (T... args) T operator! cpp/io/basic_ios/operator! (T... args) T pword cpp/io/ios_base/pword (T... args) T swap cpp/io/basic_ios/swap (T... args) T flush cpp/io/basic_ostream/flush (T... args) T tellg cpp/io/basic_istream/tellg (T... args) T set_rdbuf cpp/io/basic_ios/set_rdbuf (T... args) T fail cpp/io/basic_ios/fail (T... args) T peek cpp/io/basic_istream/peek (T... args) T operator= cpp/io/basic_stringstream/operator= (T... args) T iword cpp/io/ios_base/iword (T... args) T rdbuf cpp/io/basic_ios/rdbuf (T... args) T imbue cpp/io/basic_ios/imbue (T... args) T bad cpp/io/basic_ios/bad (T... args) T clear cpp/io/basic_ios/clear (T... args) T put cpp/io/basic_ostream/put (T... args) T init cpp/io/basic_ios/init (T... args) std::basic_stringstream::sentry cpp/io/basic_ostream/sentry T ~sentry cpp/io/basic_istream/sentry (T... args) T operator bool cpp/io/basic_istream/sentry (T... args) T sentry cpp/io/basic_istream/sentry (T... args) std::basic_stringstream::event_callback cpp/io/ios_base/event_callback std::basic_stringstream::failure cpp/io/ios_base/failure T failure cpp/io/ios_base/failure (T... args) T what cpp/error/exception/what (T... args) std::is_void cpp/types/is_void std::plus cpp/utility/functional/plus T operator() cpp/utility/functional/plus (T... args) std::bitset cpp/utility/bitset T none cpp/utility/bitset/all_any_none (T... args) T operator<< cpp/utility/bitset/operator_ltltgtgt (T... args) T operator>> cpp/utility/bitset/operator_ltltgtgt (T... args) std::bitset::reference T reset cpp/utility/bitset/reset (T... args) T count cpp/utility/bitset/count (T... args) T operator<<= cpp/utility/bitset/operator_ltltgtgt (T... args) T operator|= cpp/utility/bitset/operator_logic (T... args) T operator&= cpp/utility/bitset/operator_logic (T... args) T bitset cpp/utility/bitset/bitset (T... args) T size cpp/utility/bitset/size (T... args) T set cpp/utility/bitset/set (T... args) T all cpp/utility/bitset/all_any_none (T... args) T to_string cpp/utility/bitset/to_string (T... args) T operator!= cpp/utility/bitset/operator_cmp (T... args) T any cpp/utility/bitset/all_any_none (T... args) T test cpp/utility/bitset/test (T... args) T operator== cpp/utility/bitset/operator_cmp (T... args) T operator>>= cpp/utility/bitset/operator_ltltgtgt (T... args) T to_ulong cpp/utility/bitset/to_ulong (T... args) T operator^= cpp/utility/bitset/operator_logic (T... args) T operator~ cpp/utility/bitset/operator_logic (T... args) T to_ullong cpp/utility/bitset/to_ullong (T... args) T operator[] cpp/utility/bitset/operator_at (T... args) T flip cpp/utility/bitset/flip (T... args) std::bitset::reference cpp/utility/bitset/reference std::FILE cpp/io/c std::thread cpp/thread/thread T joinable cpp/thread/thread/joinable (T... args) T operator= cpp/thread/thread/operator= (T... args) T native_handle cpp/thread/thread/native_handle (T... args) T ~thread cpp/thread/thread/~thread (T... args) T swap cpp/thread/thread/swap (T... args) T hardware_concurrency cpp/thread/thread/hardware_concurrency (T... args) std::thread::id T thread cpp/thread/thread/thread (T... args) T join cpp/thread/thread/join (T... args) T detach cpp/thread/thread/detach (T... args) T get_id cpp/thread/thread/get_id (T... args) std::thread::id cpp/thread/thread/id T operator!= cpp/thread/thread/id/operator_cmp (T... args) T operator>= cpp/thread/thread/id/operator_cmp (T... args) T operator<= cpp/thread/thread/id/operator_cmp (T... args) T operator< cpp/thread/thread/id/operator_cmp (T... args) T operator== cpp/thread/thread/id/operator_cmp (T... args) T operator<< cpp/thread/thread/id/operator_ltlt (T... args) T id cpp/thread/thread/id/id (T... args) T operator> cpp/thread/thread/id/operator_cmp (T... args) std::future_error cpp/thread/future_error T code cpp/thread/future_error/code (T... args) T future_error cpp/thread/future_error/future_error (T... args) T what cpp/error/exception/what (T... args) std::time_base cpp/locale/time_base std::alignment_of cpp/types/alignment_of std::time_put cpp/locale/time_put std::time_put::char_type std::time_put::iter_type T do_put cpp/locale/time_put/put (T... args) T ~time_put cpp/locale/time_put/~time_put (T... args) T put cpp/locale/time_put/put (T... args) T time_put cpp/locale/time_put/time_put (T... args) std::time_put::char_type cpp/locale/time_put std::time_put::iter_type cpp/locale/time_put std::bit_or cpp/utility/functional/bit_or T operator() cpp/utility/functional/bit_or (T... args) std::pointer_traits cpp/memory/pointer_traits T pointer_to cpp/memory/pointer_traits/pointer_to (T... args) std::basic_string cpp/string/basic_string T push_back cpp/string/basic_string/push_back (T... args) T shrink_to_fit cpp/string/basic_string/shrink_to_fit (T... args) T rfind cpp/string/basic_string/rfind (T... args) T begin cpp/string/basic_string/begin (T... args) T erase cpp/string/basic_string/erase (T... args) T append cpp/string/basic_string/append (T... args) T data cpp/string/basic_string/data (T... args) T insert cpp/string/basic_string/insert (T... args) T assign cpp/string/basic_string/assign (T... args) T find_first_not_of cpp/string/basic_string/find_first_not_of (T... args) T back cpp/string/basic_string/back (T... args) T end cpp/string/basic_string/end (T... args) T resize cpp/string/basic_string/resize (T... args) T copy cpp/string/basic_string/copy (T... args) T find_last_of cpp/string/basic_string/find_last_of (T... args) T pop_back cpp/string/basic_string/pop_back (T... args) T cbegin cpp/string/basic_string/begin (T... args) T replace cpp/string/basic_string/replace (T... args) T front cpp/string/basic_string/front (T... args) T find cpp/string/basic_string/find (T... args) T compare cpp/string/basic_string/compare (T... args) T crbegin cpp/string/basic_string/rbegin (T... args) T at cpp/string/basic_string/at (T... args) T find_first_of cpp/string/basic_string/find_first_of (T... args) T rbegin cpp/string/basic_string/rbegin (T... args) T crend cpp/string/basic_string/rend (T... args) T size cpp/string/basic_string/size (T... args) T operator= cpp/string/basic_string/operator= (T... args) T find_last_not_of cpp/string/basic_string/find_last_not_of (T... args) T reserve cpp/string/basic_string/reserve (T... args) T capacity cpp/string/basic_string/capacity (T... args) T c_str cpp/string/basic_string/c_str (T... args) T empty cpp/string/basic_string/empty (T... args) T cend cpp/string/basic_string/end (T... args) T substr cpp/string/basic_string/substr (T... args) T max_size cpp/string/basic_string/max_size (T... args) T rend cpp/string/basic_string/rend (T... args) T get_allocator cpp/string/basic_string/get_allocator (T... args) T clear cpp/string/basic_string/clear (T... args) T swap cpp/string/basic_string/swap (T... args) T operator[] cpp/string/basic_string/operator_at (T... args) T length cpp/string/basic_string/size (T... args) T basic_string cpp/string/basic_string/basic_string (T... args) std::priority_queue cpp/container/priority_queue T empty cpp/container/priority_queue/empty (T... args) T swap cpp/container/priority_queue/swap (T... args) T priority_queue cpp/container/priority_queue/priority_queue (T... args) T size cpp/container/priority_queue/size (T... args) T operator= cpp/container/priority_queue/operator= (T... args) T pop cpp/container/priority_queue/pop (T... args) T emplace cpp/container/priority_queue/emplace (T... args) T push cpp/container/priority_queue/push (T... args) T top cpp/container/priority_queue/top (T... args) T ~priority_queue cpp/container/priority_queue/~priority_queue (T... args) std::exa cpp/numeric/ratio/ratio std::wostringstream cpp/io/basic_ostringstream T seekp cpp/io/basic_ostream/seekp (T... args) T setstate cpp/io/basic_ios/setstate (T... args) T getloc cpp/io/ios_base/getloc (T... args) T precision cpp/io/ios_base/precision (T... args) T flags cpp/io/ios_base/flags (T... args) T str cpp/io/basic_ostringstream/str (T... args) T widen cpp/io/basic_ios/widen (T... args) T fill cpp/io/basic_ios/fill (T... args) T setf cpp/io/ios_base/setf (T... args) std::wostringstream::event_callback T good cpp/io/basic_ios/good (T... args) T copyfmt cpp/io/basic_ios/copyfmt (T... args) T tellp cpp/io/basic_ostream/tellp (T... args) T sync_with_stdio cpp/io/ios_base/sync_with_stdio (T... args) T xalloc cpp/io/ios_base/xalloc (T... args) T exceptions cpp/io/basic_ios/exceptions (T... args) T iword cpp/io/ios_base/iword (T... args) T operator<< cpp/io/basic_ostream/operator_ltlt (T... args) T narrow cpp/io/basic_ios/narrow (T... args) T operator bool cpp/io/basic_ios/operator_bool (T... args) T operator! cpp/io/basic_ios/operator! (T... args) T wostringstream cpp/io/basic_ostringstream/basic_ostringstream (T... args) T write cpp/io/basic_ostream/write (T... args) T unsetf cpp/io/ios_base/unsetf (T... args) T width cpp/io/ios_base/width (T... args) T rdstate cpp/io/basic_ios/rdstate (T... args) T tie cpp/io/basic_ios/tie (T... args) std::wostringstream::failure T move cpp/io/basic_ios/move (T... args) T eof cpp/io/basic_ios/eof (T... args) T register_callback cpp/io/ios_base/register_callback (T... args) T pword cpp/io/ios_base/pword (T... args) T flush cpp/io/basic_ostream/flush (T... args) T set_rdbuf cpp/io/basic_ios/set_rdbuf (T... args) T fail cpp/io/basic_ios/fail (T... args) T operator= cpp/io/basic_ostringstream/operator= (T... args) T swap cpp/io/basic_ios/swap (T... args) T rdbuf cpp/io/basic_ios/rdbuf (T... args) T imbue cpp/io/basic_ios/imbue (T... args) T bad cpp/io/basic_ios/bad (T... args) T clear cpp/io/basic_ios/clear (T... args) std::wostringstream::sentry T put cpp/io/basic_ostream/put (T... args) T init cpp/io/basic_ios/init (T... args) std::wostringstream::event_callback cpp/io/ios_base/event_callback std::wostringstream::failure cpp/io/ios_base/failure T failure cpp/io/ios_base/failure (T... args) T what cpp/error/exception/what (T... args) std::wostringstream::sentry cpp/io/basic_ostream/sentry T ~sentry cpp/io/basic_ostream/sentry (T... args) T operator bool cpp/io/basic_ostream/sentry (T... args) T sentry cpp/io/basic_ostream/sentry (T... args) std::is_default_constructible cpp/types/is_default_constructible std::cregex_iterator cpp/regex/regex_iterator T operator!= cpp/regex/regex_iterator/operator_cmp (T... args) T operator= cpp/regex/regex_iterator/operator= (T... args) T cregex_iterator cpp/regex/regex_iterator/regex_iterator (T... args) T operator-> cpp/regex/regex_iterator/operator* (T... args) T operator++ cpp/regex/regex_iterator/operator_arith (T... args) T operator== cpp/regex/regex_iterator/operator_cmp (T... args) T operator* cpp/regex/regex_iterator/operator* (T... args) T operator++(int) cpp/regex/regex_iterator/operator_arith (T... args) std::wstring cpp/string/basic_string T push_back cpp/string/basic_string/push_back (T... args) T shrink_to_fit cpp/string/basic_string/shrink_to_fit (T... args) T rfind cpp/string/basic_string/rfind (T... args) T begin cpp/string/basic_string/begin (T... args) T erase cpp/string/basic_string/erase (T... args) T append cpp/string/basic_string/append (T... args) T data cpp/string/basic_string/data (T... args) T insert cpp/string/basic_string/insert (T... args) T assign cpp/string/basic_string/assign (T... args) T find_first_not_of cpp/string/basic_string/find_first_not_of (T... args) T back cpp/string/basic_string/back (T... args) T end cpp/string/basic_string/end (T... args) T resize cpp/string/basic_string/resize (T... args) T copy cpp/string/basic_string/copy (T... args) T find_last_of cpp/string/basic_string/find_last_of (T... args) T pop_back cpp/string/basic_string/pop_back (T... args) T replace cpp/string/basic_string/replace (T... args) T wstring cpp/string/basic_string/basic_string (T... args) T front cpp/string/basic_string/front (T... args) T find cpp/string/basic_string/find (T... args) T compare cpp/string/basic_string/compare (T... args) T crbegin cpp/string/basic_string/rbegin (T... args) T cbegin cpp/string/basic_string/begin (T... args) T find_first_of cpp/string/basic_string/find_first_of (T... args) T rbegin cpp/string/basic_string/rbegin (T... args) T crend cpp/string/basic_string/rend (T... args) T size cpp/string/basic_string/size (T... args) T operator= cpp/string/basic_string/operator= (T... args) T find_last_not_of cpp/string/basic_string/find_last_not_of (T... args) T reserve cpp/string/basic_string/reserve (T... args) T capacity cpp/string/basic_string/capacity (T... args) T c_str cpp/string/basic_string/c_str (T... args) T empty cpp/string/basic_string/empty (T... args) T cend cpp/string/basic_string/end (T... args) T substr cpp/string/basic_string/substr (T... args) T max_size cpp/string/basic_string/max_size (T... args) T rend cpp/string/basic_string/rend (T... args) T get_allocator cpp/string/basic_string/get_allocator (T... args) T clear cpp/string/basic_string/clear (T... args) T at cpp/string/basic_string/at (T... args) T swap cpp/string/basic_string/swap (T... args) T operator[] cpp/string/basic_string/operator_at (T... args) T length cpp/string/basic_string/size (T... args) std::remove_all_extents cpp/types/remove_all_extents std::istrstream cpp/io/istrstream T setstate cpp/io/basic_ios/setstate (T... args) T getloc cpp/io/ios_base/getloc (T... args) T precision cpp/io/ios_base/precision (T... args) T ~istrstream cpp/io/istrstream/~istrstream (T... args) T flags cpp/io/ios_base/flags (T... args) T str cpp/io/istrstream/str (T... args) T widen cpp/io/basic_ios/widen (T... args) T readsome cpp/io/basic_istream/readsome (T... args) T fill cpp/io/basic_ios/fill (T... args) T setf cpp/io/ios_base/setf (T... args) T tie cpp/io/basic_ios/tie (T... args) T operator bool cpp/io/basic_ios/operator_bool (T... args) T copyfmt cpp/io/basic_ios/copyfmt (T... args) T sync_with_stdio cpp/io/ios_base/sync_with_stdio (T... args) T gcount cpp/io/basic_istream/gcount (T... args) T get cpp/io/basic_istream/get (T... args) T xalloc cpp/io/ios_base/xalloc (T... args) T read cpp/io/basic_istream/read (T... args) T getline cpp/io/basic_istream/getline (T... args) T exceptions cpp/io/basic_ios/exceptions (T... args) T iword cpp/io/ios_base/iword (T... args) T unget cpp/io/basic_istream/unget (T... args) std::istrstream::event_callback T narrow cpp/io/basic_ios/narrow (T... args) T good cpp/io/basic_ios/good (T... args) T operator! cpp/io/basic_ios/operator! (T... args) T sync cpp/io/basic_istream/sync (T... args) T putback cpp/io/basic_istream/putback (T... args) T ignore cpp/io/basic_istream/ignore (T... args) T unsetf cpp/io/ios_base/unsetf (T... args) T width cpp/io/ios_base/width (T... args) T rdstate cpp/io/basic_ios/rdstate (T... args) T seekg cpp/io/basic_istream/seekg (T... args) std::istrstream::failure T move cpp/io/basic_ios/move (T... args) T eof cpp/io/basic_ios/eof (T... args) T register_callback cpp/io/ios_base/register_callback (T... args) T pword cpp/io/ios_base/pword (T... args) T swap cpp/io/basic_ios/swap (T... args) T istrstream cpp/io/istrstream/istrstream (T... args) T tellg cpp/io/basic_istream/tellg (T... args) T operator>> cpp/io/basic_istream/operator_gtgt (T... args) T set_rdbuf cpp/io/basic_ios/set_rdbuf (T... args) T fail cpp/io/basic_ios/fail (T... args) T peek cpp/io/basic_istream/peek (T... args) std::istrstream::sentry T rdbuf cpp/io/basic_ios/rdbuf (T... args) T imbue cpp/io/basic_ios/imbue (T... args) T bad cpp/io/basic_ios/bad (T... args) T clear cpp/io/basic_ios/clear (T... args) T init cpp/io/basic_ios/init (T... args) std::istrstream::event_callback cpp/io/ios_base/event_callback std::istrstream::failure cpp/io/ios_base/failure T failure cpp/io/ios_base/failure (T... args) T what cpp/error/exception/what (T... args) std::istrstream::sentry cpp/io/basic_istream/sentry T ~sentry cpp/io/basic_istream/sentry (T... args) T operator bool cpp/io/basic_istream/sentry (T... args) T sentry cpp/io/basic_istream/sentry (T... args) std::unary_negate cpp/utility/functional/unary_negate T operator() cpp/utility/functional/unary_negate (T... args) T unary_negate cpp/utility/functional/unary_negate (T... args) std::unordered_multiset cpp/container/unordered_multiset T max_bucket_count cpp/container/unordered_multiset/max_bucket_count (T... args) T cbegin cpp/container/unordered_multiset/begin (T... args) T erase cpp/container/unordered_multiset/erase (T... args) T insert cpp/container/unordered_multiset/insert (T... args) T bucket_count cpp/container/unordered_multiset/bucket_count (T... args) T max_load_factor cpp/container/unordered_multiset/max_load_factor (T... args) T end cpp/container/unordered_multiset/end (T... args) T emplace_hint cpp/container/unordered_multiset/emplace_hint (T... args) T unordered_multiset cpp/container/unordered_multiset/unordered_multiset (T... args) T end(int) cpp/container/unordered_multiset/end2 (T... args) T key_eq cpp/container/unordered_multiset/key_eq (T... args) T hash_function cpp/container/unordered_multiset/hash_function (T... args) T equal_range cpp/container/unordered_multiset/equal_range (T... args) T begin cpp/container/unordered_multiset/begin (T... args) T cbegin(int) cpp/container/unordered_multiset/begin2 (T... args) T swap cpp/container/unordered_multiset/swap (T... args) T ~unordered_multiset cpp/container/unordered_multiset/~unordered_multiset (T... args) T load_factor cpp/container/unordered_multiset/load_factor (T... args) T size cpp/container/unordered_multiset/size (T... args) T operator= cpp/container/unordered_multiset/operator= (T... args) T cend cpp/container/unordered_multiset/end (T... args) T reserve cpp/container/unordered_multiset/reserve (T... args) T rehash cpp/container/unordered_multiset/rehash (T... args) T bucket cpp/container/unordered_multiset/bucket (T... args) T find cpp/container/unordered_multiset/find (T... args) T empty cpp/container/unordered_multiset/empty (T... args) T get_allocator cpp/container/unordered_multiset/get_allocator (T... args) T max_size cpp/container/unordered_multiset/max_size (T... args) T cend(int) cpp/container/unordered_multiset/end2 (T... args) T count cpp/container/unordered_multiset/count (T... args) T clear cpp/container/unordered_multiset/clear (T... args) T begin(int) cpp/container/unordered_multiset/begin2 (T... args) T emplace cpp/container/unordered_multiset/emplace (T... args) T bucket_size cpp/container/unordered_multiset/bucket_size (T... args) std::basic_ostream cpp/io/basic_ostream T seekp cpp/io/basic_ostream/seekp (T... args) T setstate cpp/io/basic_ios/setstate (T... args) T getloc cpp/io/ios_base/getloc (T... args) T precision cpp/io/ios_base/precision (T... args) T flags cpp/io/ios_base/flags (T... args) T widen cpp/io/basic_ios/widen (T... args) T fill cpp/io/basic_ios/fill (T... args) T setf cpp/io/ios_base/setf (T... args) std::basic_ostream::event_callback T operator bool cpp/io/basic_ios/operator_bool (T... args) T copyfmt cpp/io/basic_ios/copyfmt (T... args) T tellp cpp/io/basic_ostream/tellp (T... args) T sync_with_stdio cpp/io/ios_base/sync_with_stdio (T... args) T xalloc cpp/io/ios_base/xalloc (T... args) T exceptions cpp/io/basic_ios/exceptions (T... args) T iword cpp/io/ios_base/iword (T... args) T rdbuf cpp/io/basic_ios/rdbuf (T... args) T operator<< cpp/io/basic_ostream/operator_ltlt (T... args) T narrow cpp/io/basic_ios/narrow (T... args) T good cpp/io/basic_ios/good (T... args) T operator! cpp/io/basic_ios/operator! (T... args) T write cpp/io/basic_ostream/write (T... args) T unsetf cpp/io/ios_base/unsetf (T... args) T width cpp/io/ios_base/width (T... args) T rdstate cpp/io/basic_ios/rdstate (T... args) T tie cpp/io/basic_ios/tie (T... args) std::basic_ostream::failure T move cpp/io/basic_ios/move (T... args) T eof cpp/io/basic_ios/eof (T... args) T register_callback cpp/io/ios_base/register_callback (T... args) T pword cpp/io/ios_base/pword (T... args) T swap cpp/io/basic_ios/swap (T... args) T flush cpp/io/basic_ostream/flush (T... args) T set_rdbuf cpp/io/basic_ios/set_rdbuf (T... args) T fail cpp/io/basic_ios/fail (T... args) T basic_ostream cpp/io/basic_ostream/basic_ostream (T... args) T ~basic_ostream cpp/io/basic_ostream/~basic_ostream (T... args) std::basic_ostream::sentry T imbue cpp/io/basic_ios/imbue (T... args) T bad cpp/io/basic_ios/bad (T... args) T clear cpp/io/basic_ios/clear (T... args) T put cpp/io/basic_ostream/put (T... args) T init cpp/io/basic_ios/init (T... args) std::basic_ostream::event_callback cpp/io/ios_base/event_callback std::basic_ostream::failure cpp/io/ios_base/failure T failure cpp/io/ios_base/failure (T... args) T what cpp/error/exception/what (T... args) std::basic_ostream::sentry cpp/io/basic_ostream/sentry T ~sentry cpp/io/basic_ostream/sentry (T... args) T operator bool cpp/io/basic_ostream/sentry (T... args) T sentry cpp/io/basic_ostream/sentry (T... args) std::wsregex_iterator cpp/regex/regex_iterator T wsregex_iterator cpp/regex/regex_iterator/regex_iterator (T... args) T operator= cpp/regex/regex_iterator/operator= (T... args) T operator== cpp/regex/regex_iterator/operator_cmp (T... args) T operator-> cpp/regex/regex_iterator/operator* (T... args) T operator++ cpp/regex/regex_iterator/operator_arith (T... args) T operator* cpp/regex/regex_iterator/operator* (T... args) T operator!= cpp/regex/regex_iterator/operator_cmp (T... args) T operator++(int) cpp/regex/regex_iterator/operator_arith (T... args) std::uint_fast16_t cpp/types/integer std::is_nothrow_assignable cpp/types/is_assignable std::moneypunct cpp/locale/moneypunct T do_curr_symbol cpp/locale/moneypunct/curr_symbol (T... args) T do_decimal_point cpp/locale/moneypunct/decimal_point (T... args) T thousands_sep cpp/locale/moneypunct/thousands_sep (T... args) T do_pos_format cpp/locale/moneypunct/pos_format (T... args) T curr_symbol cpp/locale/moneypunct/curr_symbol (T... args) T positive_sign cpp/locale/moneypunct/positive_sign (T... args) T frac_digits cpp/locale/moneypunct/frac_digits (T... args) T do_negative_sign cpp/locale/moneypunct/positive_sign (T... args) T ~moneypunct cpp/locale/moneypunct/~moneypunct (T... args) T pos_format cpp/locale/moneypunct/pos_format (T... args) T do_thousands_sep cpp/locale/moneypunct/thousands_sep (T... args) T neg_format cpp/locale/moneypunct/pos_format (T... args) T negative_sign cpp/locale/moneypunct/positive_sign (T... args) T grouping cpp/locale/moneypunct/grouping (T... args) T do_frac_digits cpp/locale/moneypunct/frac_digits (T... args) T decimal_point cpp/locale/moneypunct/decimal_point (T... args) T do_neg_format cpp/locale/moneypunct/pos_format (T... args) std::moneypunct::string_type std::moneypunct::pattern T do_positive_sign cpp/locale/moneypunct/positive_sign (T... args) std::moneypunct::char_type T moneypunct cpp/locale/moneypunct/moneypunct (T... args) T do_grouping cpp/locale/moneypunct/grouping (T... args) std::moneypunct::string_type cpp/locale/moneypunct std::moneypunct::pattern cpp/locale/money_base std::moneypunct::char_type cpp/locale/moneypunct std::type_index cpp/types/type_index T operator!= cpp/types/type_index/operator_cmp (T... args) T hash_code cpp/types/type_index/hash_code (T... args) T operator<= cpp/types/type_index/operator_cmp (T... args) T operator< cpp/types/type_index/operator_cmp (T... args) T operator== cpp/types/type_index/operator_cmp (T... args) T operator>= cpp/types/type_index/operator_cmp (T... args) T type_index cpp/types/type_index/type_index (T... args) T name cpp/types/type_index/name (T... args) T operator> cpp/types/type_index/operator_cmp (T... args) std::is_standard_layout cpp/types/is_standard_layout std::timed_mutex cpp/thread/timed_mutex T unlock cpp/thread/timed_mutex/unlock (T... args) T native_handle cpp/thread/timed_mutex/native_handle (T... args) T try_lock_until cpp/thread/timed_mutex/try_lock_until (T... args) T try_lock_for cpp/thread/timed_mutex/try_lock_for (T... args) T lock cpp/thread/timed_mutex/lock (T... args) T try_lock cpp/thread/timed_mutex/try_lock (T... args) T timed_mutex cpp/thread/timed_mutex/timed_mutex (T... args) std::bad_exception cpp/error/bad_exception std::int_fast64_t cpp/types/integer std::function cpp/utility/functional/function T operator= cpp/utility/functional/function/operator= (T... args) T swap cpp/utility/functional/function/swap (T... args) T assign cpp/utility/functional/function/assign (T... args) T target cpp/utility/functional/function/target (T... args) T operator() cpp/utility/functional/function/operator() (T... args) T target_type cpp/utility/functional/function/target_type (T... args) T function cpp/utility/functional/function/function (T... args) T operator bool cpp/utility/functional/function/operator_bool (T... args) T ~function cpp/utility/functional/function/~function (T... args) std::bad_cast cpp/types/bad_cast T bad_cast cpp/types/bad_cast/bad_cast (T... args) T what cpp/error/exception/what (T... args) std::error_condition cpp/error/error_condition T error_condition cpp/error/error_condition/error_condition (T... args) T operator= cpp/error/error_condition/operator= (T... args) T operator bool cpp/error/error_condition/operator_bool (T... args) T assign cpp/error/error_condition/assign (T... args) T value cpp/error/error_condition/value (T... args) T clear cpp/error/error_condition/clear (T... args) T message cpp/error/error_condition/message (T... args) T category cpp/error/error_condition/category (T... args) std::filebuf cpp/io/basic_filebuf T eback cpp/io/basic_streambuf/gptr (T... args) T setp cpp/io/basic_streambuf/setp (T... args) T pbackfail cpp/io/basic_streambuf/pbackfail (T... args) T seekoff cpp/io/basic_streambuf/pubseekoff (T... args) T pbase cpp/io/basic_streambuf/pptr (T... args) T egptr cpp/io/basic_streambuf/gptr (T... args) T underflow cpp/io/basic_streambuf/underflow (T... args) T setbuf cpp/io/basic_streambuf/pubsetbuf (T... args) T gbump cpp/io/basic_streambuf/gbump (T... args) T xsgetn cpp/io/basic_streambuf/sgetn (T... args) T is_open cpp/io/basic_filebuf/is_open (T... args) T sputn cpp/io/basic_streambuf/sputn (T... args) T pptr cpp/io/basic_streambuf/pptr (T... args) T seekpos cpp/io/basic_streambuf/pubseekpos (T... args) T pubsync cpp/io/basic_streambuf/pubsync (T... args) T pubseekoff cpp/io/basic_streambuf/pubseekoff (T... args) T filebuf cpp/io/basic_filebuf/basic_filebuf (T... args) T pbump cpp/io/basic_streambuf/pbump (T... args) T pubseekpos cpp/io/basic_streambuf/pubseekpos (T... args) T sputbackc cpp/io/basic_streambuf/sputbackc (T... args) T in_avail cpp/io/basic_streambuf/in_avail (T... args) T getloc cpp/io/basic_streambuf/getloc (T... args) T sungetc cpp/io/basic_streambuf/sungetc (T... args) T epptr cpp/io/basic_streambuf/pptr (T... args) T close cpp/io/basic_filebuf/close (T... args) T sync cpp/io/basic_streambuf/pubsync (T... args) T xsputn cpp/io/basic_streambuf/sputn (T... args) T setg cpp/io/basic_streambuf/setg (T... args) T pubimbue cpp/io/basic_streambuf/pubimbue (T... args) T showmanyc cpp/io/basic_streambuf/showmanyc (T... args) T open cpp/io/basic_filebuf/open (T... args) T sgetc cpp/io/basic_streambuf/sgetc (T... args) T swap cpp/io/basic_streambuf/swap (T... args) T sputc cpp/io/basic_streambuf/sputc (T... args) T overflow cpp/io/basic_streambuf/overflow (T... args) T uflow cpp/io/basic_streambuf/uflow (T... args) T sgetn cpp/io/basic_streambuf/sgetn (T... args) T sbumpc cpp/io/basic_streambuf/sbumpc (T... args) T ~filebuf cpp/io/basic_filebuf/~basic_filebuf (T... args) T operator= cpp/io/basic_filebuf/operator= (T... args) T pubsetbuf cpp/io/basic_streambuf/pubsetbuf (T... args) T imbue cpp/io/basic_streambuf/pubimbue (T... args) T snextc cpp/io/basic_streambuf/snextc (T... args) T gptr cpp/io/basic_streambuf/gptr (T... args) std::int_least16_t cpp/types/integer std::istreambuf_iterator cpp/iterator/istreambuf_iterator std::u16string cpp/string/basic_string T push_back cpp/string/basic_string/push_back (T... args) T shrink_to_fit cpp/string/basic_string/shrink_to_fit (T... args) T rfind cpp/string/basic_string/rfind (T... args) T begin cpp/string/basic_string/begin (T... args) T erase cpp/string/basic_string/erase (T... args) T append cpp/string/basic_string/append (T... args) T data cpp/string/basic_string/data (T... args) T insert cpp/string/basic_string/insert (T... args) T assign cpp/string/basic_string/assign (T... args) T find_first_not_of cpp/string/basic_string/find_first_not_of (T... args) T back cpp/string/basic_string/back (T... args) T end cpp/string/basic_string/end (T... args) T resize cpp/string/basic_string/resize (T... args) T copy cpp/string/basic_string/copy (T... args) T find_last_of cpp/string/basic_string/find_last_of (T... args) T pop_back cpp/string/basic_string/pop_back (T... args) T replace cpp/string/basic_string/replace (T... args) T front cpp/string/basic_string/front (T... args) T substr cpp/string/basic_string/substr (T... args) T find cpp/string/basic_string/find (T... args) T compare cpp/string/basic_string/compare (T... args) T crbegin cpp/string/basic_string/rbegin (T... args) T cbegin cpp/string/basic_string/begin (T... args) T find_first_of cpp/string/basic_string/find_first_of (T... args) T rbegin cpp/string/basic_string/rbegin (T... args) T crend cpp/string/basic_string/rend (T... args) T size cpp/string/basic_string/size (T... args) T operator= cpp/string/basic_string/operator= (T... args) T find_last_not_of cpp/string/basic_string/find_last_not_of (T... args) T reserve cpp/string/basic_string/reserve (T... args) T capacity cpp/string/basic_string/capacity (T... args) T c_str cpp/string/basic_string/c_str (T... args) T empty cpp/string/basic_string/empty (T... args) T cend cpp/string/basic_string/end (T... args) T u16string cpp/string/basic_string/basic_string (T... args) T max_size cpp/string/basic_string/max_size (T... args) T rend cpp/string/basic_string/rend (T... args) T get_allocator cpp/string/basic_string/get_allocator (T... args) T clear cpp/string/basic_string/clear (T... args) T at cpp/string/basic_string/at (T... args) T swap cpp/string/basic_string/swap (T... args) T operator[] cpp/string/basic_string/operator_at (T... args) T length cpp/string/basic_string/size (T... args) std::is_error_condition_enum cpp/error/error_condition/is_error_condition_enum std::is_nothrow_destructible cpp/types/is_destructible std::wiostream cpp/io/basic_iostream T seekp cpp/io/basic_ostream/seekp (T... args) T setstate cpp/io/basic_ios/setstate (T... args) T getloc cpp/io/ios_base/getloc (T... args) T precision cpp/io/ios_base/precision (T... args) T width cpp/io/ios_base/width (T... args) T flags cpp/io/ios_base/flags (T... args) T widen cpp/io/basic_ios/widen (T... args) T operator>> cpp/io/basic_istream/operator_gtgt (T... args) T fill cpp/io/basic_ios/fill (T... args) T setf cpp/io/ios_base/setf (T... args) T seekg cpp/io/basic_istream/seekg (T... args) T good cpp/io/basic_ios/good (T... args) T copyfmt cpp/io/basic_ios/copyfmt (T... args) T tellp cpp/io/basic_ostream/tellp (T... args) T sync_with_stdio cpp/io/ios_base/sync_with_stdio (T... args) T gcount cpp/io/basic_istream/gcount (T... args) T unget cpp/io/basic_istream/unget (T... args) T xalloc cpp/io/ios_base/xalloc (T... args) T read cpp/io/basic_istream/read (T... args) T getline cpp/io/basic_istream/getline (T... args) T eof cpp/io/basic_ios/eof (T... args) T exceptions cpp/io/basic_ios/exceptions (T... args) std::wiostream::sentry T register_callback cpp/io/ios_base/register_callback (T... args) T operator<< cpp/io/basic_ostream/operator_ltlt (T... args) std::wiostream::event_callback T narrow cpp/io/basic_ios/narrow (T... args) T wiostream cpp/io/basic_iostream/basic_iostream (T... args) T operator bool cpp/io/basic_ios/operator_bool (T... args) T write cpp/io/basic_ostream/write (T... args) T sync cpp/io/basic_istream/sync (T... args) T putback cpp/io/basic_istream/putback (T... args) T ignore cpp/io/basic_istream/ignore (T... args) T unsetf cpp/io/ios_base/unsetf (T... args) T readsome cpp/io/basic_istream/readsome (T... args) T rdstate cpp/io/basic_ios/rdstate (T... args) T tie cpp/io/basic_ios/tie (T... args) std::wiostream::failure T move cpp/io/basic_ios/move (T... args) T get cpp/io/basic_istream/get (T... args) T operator! cpp/io/basic_ios/operator! (T... args) T pword cpp/io/ios_base/pword (T... args) T swap cpp/io/basic_ios/swap (T... args) T ~wiostream cpp/io/basic_iostream/~basic_iostream (T... args) T flush cpp/io/basic_ostream/flush (T... args) T tellg cpp/io/basic_istream/tellg (T... args) T set_rdbuf cpp/io/basic_ios/set_rdbuf (T... args) T fail cpp/io/basic_ios/fail (T... args) T peek cpp/io/basic_istream/peek (T... args) T iword cpp/io/ios_base/iword (T... args) T rdbuf cpp/io/basic_ios/rdbuf (T... args) T imbue cpp/io/basic_ios/imbue (T... args) T bad cpp/io/basic_ios/bad (T... args) T clear cpp/io/basic_ios/clear (T... args) T put cpp/io/basic_ostream/put (T... args) T init cpp/io/basic_ios/init (T... args) std::wiostream::sentry cpp/io/basic_ostream/sentry T ~sentry cpp/io/basic_istream/sentry (T... args) T operator bool cpp/io/basic_istream/sentry (T... args) T sentry cpp/io/basic_istream/sentry (T... args) std::wiostream::event_callback cpp/io/ios_base/event_callback std::wiostream::failure cpp/io/ios_base/failure T failure cpp/io/ios_base/failure (T... args) T what cpp/error/exception/what (T... args) std::allocator_arg_t cpp/memory/allocator_arg_t std::rel_ops T operator!= cpp/utility/rel_ops/operator_cmp (T... args) T operator>= cpp/utility/rel_ops/operator_cmp (T... args) T operator<= cpp/utility/rel_ops/operator_cmp (T... args) T operator> cpp/utility/rel_ops/operator_cmp (T... args) std::uint_least32_t cpp/types/integer std::collate cpp/locale/collate T hash cpp/locale/collate/hash (T... args) T do_hash cpp/locale/collate/hash (T... args) T collate cpp/locale/collate/collate (T... args) std::collate::char_type T ~collate cpp/locale/collate/~collate (T... args) T do_transform cpp/locale/collate/transform (T... args) T transform cpp/locale/collate/transform (T... args) T do_compare cpp/locale/collate/compare (T... args) std::collate::string_type T compare cpp/locale/collate/compare (T... args) std::collate::char_type cpp/locale/collate std::collate::string_type cpp/locale/collate std::remove_const cpp/types/remove_cv std::u32string cpp/string/basic_string T push_back cpp/string/basic_string/push_back (T... args) T shrink_to_fit cpp/string/basic_string/shrink_to_fit (T... args) T rfind cpp/string/basic_string/rfind (T... args) T begin cpp/string/basic_string/begin (T... args) T erase cpp/string/basic_string/erase (T... args) T append cpp/string/basic_string/append (T... args) T data cpp/string/basic_string/data (T... args) T insert cpp/string/basic_string/insert (T... args) T u32string cpp/string/basic_string/basic_string (T... args) T find_first_not_of cpp/string/basic_string/find_first_not_of (T... args) T back cpp/string/basic_string/back (T... args) T end cpp/string/basic_string/end (T... args) T resize cpp/string/basic_string/resize (T... args) T copy cpp/string/basic_string/copy (T... args) T find_last_of cpp/string/basic_string/find_last_of (T... args) T pop_back cpp/string/basic_string/pop_back (T... args) T cbegin cpp/string/basic_string/begin (T... args) T replace cpp/string/basic_string/replace (T... args) T front cpp/string/basic_string/front (T... args) T find cpp/string/basic_string/find (T... args) T compare cpp/string/basic_string/compare (T... args) T crbegin cpp/string/basic_string/rbegin (T... args) T size cpp/string/basic_string/size (T... args) T find_first_of cpp/string/basic_string/find_first_of (T... args) T rbegin cpp/string/basic_string/rbegin (T... args) T crend cpp/string/basic_string/rend (T... args) T assign cpp/string/basic_string/assign (T... args) T operator= cpp/string/basic_string/operator= (T... args) T find_last_not_of cpp/string/basic_string/find_last_not_of (T... args) T reserve cpp/string/basic_string/reserve (T... args) T capacity cpp/string/basic_string/capacity (T... args) T c_str cpp/string/basic_string/c_str (T... args) T empty cpp/string/basic_string/empty (T... args) T cend cpp/string/basic_string/end (T... args) T substr cpp/string/basic_string/substr (T... args) T max_size cpp/string/basic_string/max_size (T... args) T rend cpp/string/basic_string/rend (T... args) T get_allocator cpp/string/basic_string/get_allocator (T... args) T clear cpp/string/basic_string/clear (T... args) T at cpp/string/basic_string/at (T... args) T swap cpp/string/basic_string/swap (T... args) T operator[] cpp/string/basic_string/operator_at (T... args) T length cpp/string/basic_string/size (T... args) std::uint_fast32_t cpp/types/integer std::is_lvalue_reference cpp/types/is_lvalue_reference std::complex cpp/numeric/complex T operator= cpp/numeric/complex/operator= (T... args) T complex cpp/numeric/complex/complex (T... args) T operator-= cpp/numeric/complex/operator_arith (T... args) T imag cpp/numeric/complex/imag (T... args) T operator+= cpp/numeric/complex/operator_arith (T... args) T operator/= cpp/numeric/complex/operator_arith (T... args) T operator*= cpp/numeric/complex/operator_arith (T... args) T real cpp/numeric/complex/real (T... args) std::ofstream cpp/io/basic_ofstream T seekp cpp/io/basic_ostream/seekp (T... args) T setstate cpp/io/basic_ios/setstate (T... args) T getloc cpp/io/ios_base/getloc (T... args) T precision cpp/io/ios_base/precision (T... args) T flags cpp/io/ios_base/flags (T... args) T widen cpp/io/basic_ios/widen (T... args) T fill cpp/io/basic_ios/fill (T... args) T setf cpp/io/ios_base/setf (T... args) std::ofstream::event_callback T open cpp/io/basic_ofstream/open (T... args) T good cpp/io/basic_ios/good (T... args) T copyfmt cpp/io/basic_ios/copyfmt (T... args) T tellp cpp/io/basic_ostream/tellp (T... args) T sync_with_stdio cpp/io/ios_base/sync_with_stdio (T... args) T xalloc cpp/io/ios_base/xalloc (T... args) T exceptions cpp/io/basic_ios/exceptions (T... args) T iword cpp/io/ios_base/iword (T... args) T operator<< cpp/io/basic_ostream/operator_ltlt (T... args) T narrow cpp/io/basic_ios/narrow (T... args) T operator bool cpp/io/basic_ios/operator_bool (T... args) T operator! cpp/io/basic_ios/operator! (T... args) T close cpp/io/basic_ofstream/close (T... args) T write cpp/io/basic_ostream/write (T... args) T unsetf cpp/io/ios_base/unsetf (T... args) T width cpp/io/ios_base/width (T... args) T rdstate cpp/io/basic_ios/rdstate (T... args) T tie cpp/io/basic_ios/tie (T... args) std::ofstream::failure T move cpp/io/basic_ios/move (T... args) T eof cpp/io/basic_ios/eof (T... args) T register_callback cpp/io/ios_base/register_callback (T... args) T pword cpp/io/ios_base/pword (T... args) T flush cpp/io/basic_ostream/flush (T... args) T set_rdbuf cpp/io/basic_ios/set_rdbuf (T... args) T fail cpp/io/basic_ios/fail (T... args) T is_open cpp/io/basic_ofstream/is_open (T... args) T operator= cpp/io/basic_ofstream/operator= (T... args) T swap cpp/io/basic_ios/swap (T... args) T rdbuf cpp/io/basic_ios/rdbuf (T... args) T imbue cpp/io/basic_ios/imbue (T... args) T bad cpp/io/basic_ios/bad (T... args) T clear cpp/io/basic_ios/clear (T... args) std::ofstream::sentry T put cpp/io/basic_ostream/put (T... args) T ofstream cpp/io/basic_ofstream/basic_ofstream (T... args) T init cpp/io/basic_ios/init (T... args) std::ofstream::event_callback cpp/io/ios_base/event_callback std::ofstream::failure cpp/io/ios_base/failure T failure cpp/io/ios_base/failure (T... args) T what cpp/error/exception/what (T... args) std::ofstream::sentry cpp/io/basic_ostream/sentry T ~sentry cpp/io/basic_ostream/sentry (T... args) T operator bool cpp/io/basic_ostream/sentry (T... args) T sentry cpp/io/basic_ostream/sentry (T... args) std::insert_iterator cpp/iterator/insert_iterator std::bad_array_length cpp/memory/new/bad_array_length T bad_array_length cpp/memory/new/bad_array_length (T... args) T what cpp/memory/new/bad_alloc (T... args) std::this_thread T yield cpp/thread/yield (T... args) T sleep_for cpp/thread/sleep_for (T... args) T sleep_until cpp/thread/sleep_until (T... args) T get_id cpp/thread/get_id (T... args) std::is_trivially_copyable cpp/types/is_trivially_copyable std::basic_istringstream cpp/io/basic_istringstream T basic_istringstream cpp/io/basic_istringstream/basic_istringstream (T... args) T setstate cpp/io/basic_ios/setstate (T... args) T getloc cpp/io/ios_base/getloc (T... args) T precision cpp/io/ios_base/precision (T... args) T flags cpp/io/ios_base/flags (T... args) T str cpp/io/basic_istringstream/str (T... args) T widen cpp/io/basic_ios/widen (T... args) T readsome cpp/io/basic_istream/readsome (T... args) T fill cpp/io/basic_ios/fill (T... args) T setf cpp/io/ios_base/setf (T... args) T tie cpp/io/basic_ios/tie (T... args) T operator bool cpp/io/basic_ios/operator_bool (T... args) T copyfmt cpp/io/basic_ios/copyfmt (T... args) T sync_with_stdio cpp/io/ios_base/sync_with_stdio (T... args) T gcount cpp/io/basic_istream/gcount (T... args) T get cpp/io/basic_istream/get (T... args) T xalloc cpp/io/ios_base/xalloc (T... args) T read cpp/io/basic_istream/read (T... args) T getline cpp/io/basic_istream/getline (T... args) T exceptions cpp/io/basic_ios/exceptions (T... args) T iword cpp/io/ios_base/iword (T... args) T unget cpp/io/basic_istream/unget (T... args) std::basic_istringstream::event_callback T narrow cpp/io/basic_ios/narrow (T... args) T good cpp/io/basic_ios/good (T... args) T operator! cpp/io/basic_ios/operator! (T... args) T sync cpp/io/basic_istream/sync (T... args) T putback cpp/io/basic_istream/putback (T... args) T ignore cpp/io/basic_istream/ignore (T... args) T unsetf cpp/io/ios_base/unsetf (T... args) T width cpp/io/ios_base/width (T... args) T rdstate cpp/io/basic_ios/rdstate (T... args) T seekg cpp/io/basic_istream/seekg (T... args) std::basic_istringstream::failure T move cpp/io/basic_ios/move (T... args) T eof cpp/io/basic_ios/eof (T... args) T register_callback cpp/io/ios_base/register_callback (T... args) T pword cpp/io/ios_base/pword (T... args) T swap cpp/io/basic_ios/swap (T... args) T tellg cpp/io/basic_istream/tellg (T... args) T operator>> cpp/io/basic_istream/operator_gtgt (T... args) T set_rdbuf cpp/io/basic_ios/set_rdbuf (T... args) T fail cpp/io/basic_ios/fail (T... args) T peek cpp/io/basic_istream/peek (T... args) T operator= cpp/io/basic_istringstream/operator= (T... args) std::basic_istringstream::sentry T rdbuf cpp/io/basic_ios/rdbuf (T... args) T imbue cpp/io/basic_ios/imbue (T... args) T bad cpp/io/basic_ios/bad (T... args) T clear cpp/io/basic_ios/clear (T... args) T init cpp/io/basic_ios/init (T... args) std::basic_istringstream::event_callback cpp/io/ios_base/event_callback std::basic_istringstream::failure cpp/io/ios_base/failure T failure cpp/io/ios_base/failure (T... args) T what cpp/error/exception/what (T... args) std::basic_istringstream::sentry cpp/io/basic_istream/sentry T ~sentry cpp/io/basic_istream/sentry (T... args) T operator bool cpp/io/basic_istream/sentry (T... args) T sentry cpp/io/basic_istream/sentry (T... args) std::basic_ifstream cpp/io/basic_ifstream T setstate cpp/io/basic_ios/setstate (T... args) T getloc cpp/io/ios_base/getloc (T... args) T precision cpp/io/ios_base/precision (T... args) T basic_ifstream cpp/io/basic_ifstream/basic_ifstream (T... args) T flags cpp/io/ios_base/flags (T... args) T widen cpp/io/basic_ios/widen (T... args) T readsome cpp/io/basic_istream/readsome (T... args) T fill cpp/io/basic_ios/fill (T... args) T setf cpp/io/ios_base/setf (T... args) T tie cpp/io/basic_ios/tie (T... args) T open cpp/io/basic_ifstream/open (T... args) T operator bool cpp/io/basic_ios/operator_bool (T... args) T copyfmt cpp/io/basic_ios/copyfmt (T... args) T sync_with_stdio cpp/io/ios_base/sync_with_stdio (T... args) T gcount cpp/io/basic_istream/gcount (T... args) T get cpp/io/basic_istream/get (T... args) T xalloc cpp/io/ios_base/xalloc (T... args) T read cpp/io/basic_istream/read (T... args) T getline cpp/io/basic_istream/getline (T... args) T exceptions cpp/io/basic_ios/exceptions (T... args) T iword cpp/io/ios_base/iword (T... args) T unget cpp/io/basic_istream/unget (T... args) std::basic_ifstream::event_callback T narrow cpp/io/basic_ios/narrow (T... args) T good cpp/io/basic_ios/good (T... args) T operator! cpp/io/basic_ios/operator! (T... args) T close cpp/io/basic_ifstream/close (T... args) T sync cpp/io/basic_istream/sync (T... args) T putback cpp/io/basic_istream/putback (T... args) T ignore cpp/io/basic_istream/ignore (T... args) T unsetf cpp/io/ios_base/unsetf (T... args) T width cpp/io/ios_base/width (T... args) T rdstate cpp/io/basic_ios/rdstate (T... args) T seekg cpp/io/basic_istream/seekg (T... args) std::basic_ifstream::failure T move cpp/io/basic_ios/move (T... args) T eof cpp/io/basic_ios/eof (T... args) T register_callback cpp/io/ios_base/register_callback (T... args) T pword cpp/io/ios_base/pword (T... args) T swap cpp/io/basic_ios/swap (T... args) T tellg cpp/io/basic_istream/tellg (T... args) T operator>> cpp/io/basic_istream/operator_gtgt (T... args) T set_rdbuf cpp/io/basic_ios/set_rdbuf (T... args) T fail cpp/io/basic_ios/fail (T... args) T is_open cpp/io/basic_ifstream/is_open (T... args) T peek cpp/io/basic_istream/peek (T... args) T operator= cpp/io/basic_ifstream/operator= (T... args) std::basic_ifstream::sentry T rdbuf cpp/io/basic_ios/rdbuf (T... args) T imbue cpp/io/basic_ios/imbue (T... args) T bad cpp/io/basic_ios/bad (T... args) T clear cpp/io/basic_ios/clear (T... args) T init cpp/io/basic_ios/init (T... args) std::basic_ifstream::event_callback cpp/io/ios_base/event_callback std::basic_ifstream::failure cpp/io/ios_base/failure T failure cpp/io/ios_base/failure (T... args) T what cpp/error/exception/what (T... args) std::basic_ifstream::sentry cpp/io/basic_istream/sentry T ~sentry cpp/io/basic_istream/sentry (T... args) T operator bool cpp/io/basic_istream/sentry (T... args) T sentry cpp/io/basic_istream/sentry (T... args) std::list cpp/container/list T pop_front cpp/container/list/pop_front (T... args) T push_back cpp/container/list/push_back (T... args) T splice cpp/container/list/splice (T... args) T crbegin cpp/container/list/rbegin (T... args) T erase cpp/container/list/erase (T... args) T emplace_front cpp/container/list/emplace_front (T... args) T insert cpp/container/list/insert (T... args) T reverse cpp/container/list/reverse (T... args) T back cpp/container/list/back (T... args) T end cpp/container/list/end (T... args) T remove cpp/container/list/remove (T... args) T list cpp/container/list/list (T... args) T emplace_back cpp/container/list/emplace_back (T... args) T pop_back cpp/container/list/pop_back (T... args) T cbegin cpp/container/list/begin (T... args) T front cpp/container/list/front (T... args) T unique cpp/container/list/unique (T... args) T size cpp/container/list/size (T... args) T resize cpp/container/list/resize (T... args) T push_front cpp/container/list/push_front (T... args) T rbegin cpp/container/list/rbegin (T... args) T crend cpp/container/list/rend (T... args) T assign cpp/container/list/assign (T... args) T operator= cpp/container/list/operator= (T... args) T sort cpp/container/list/sort (T... args) T ~list cpp/container/list/~list (T... args) T merge cpp/container/list/merge (T... args) T empty cpp/container/list/empty (T... args) T remove_if cpp/container/list/remove (T... args) T cend cpp/container/list/end (T... args) T swap cpp/container/list/swap (T... args) T max_size cpp/container/list/max_size (T... args) T rend cpp/container/list/rend (T... args) T get_allocator cpp/container/list/get_allocator (T... args) T clear cpp/container/list/clear (T... args) T emplace cpp/container/list/emplace (T... args) T begin cpp/container/list/begin (T... args) std::minus cpp/utility/functional/minus T operator() cpp/utility/functional/minus (T... args) std::map cpp/container/map T begin cpp/container/map/begin (T... args) T erase cpp/container/map/erase (T... args) T insert cpp/container/map/insert (T... args) T swap cpp/container/map/swap (T... args) T end cpp/container/map/end (T... args) T emplace_hint cpp/container/map/emplace_hint (T... args) T key_comp cpp/container/map/key_comp (T... args) std::map::value_compare T cbegin cpp/container/map/begin (T... args) T count cpp/container/map/count (T... args) T find cpp/container/map/find (T... args) T map cpp/container/map/map (T... args) T crbegin cpp/container/map/rbegin (T... args) T at cpp/container/map/at (T... args) T upper_bound cpp/container/map/upper_bound (T... args) T rbegin cpp/container/map/rbegin (T... args) T crend cpp/container/map/rend (T... args) T size cpp/container/map/size (T... args) T operator= cpp/container/map/operator= (T... args) T ~map cpp/container/map/~map (T... args) T value_comp cpp/container/map/value_comp (T... args) T empty cpp/container/map/empty (T... args) T lower_bound cpp/container/map/lower_bound (T... args) T cend cpp/container/map/end (T... args) T max_size cpp/container/map/max_size (T... args) T rend cpp/container/map/rend (T... args) T get_allocator cpp/container/map/get_allocator (T... args) T clear cpp/container/map/clear (T... args) T equal_range cpp/container/map/equal_range (T... args) T emplace cpp/container/map/emplace (T... args) T operator[] cpp/container/map/operator_at (T... args) std::map::value_compare cpp/container/map/value_compare std::linear_congruential_engine cpp/numeric/random/linear_congruential_engine T discard cpp/numeric/random/linear_congruential_engine/discard (T... args) T linear_congruential_engine cpp/numeric/random/linear_congruential_engine/linear_congruential_engine (T... args) T max cpp/numeric/random/linear_congruential_engine/max (T... args) T operator() cpp/numeric/random/linear_congruential_engine/operator() (T... args) T seed cpp/numeric/random/linear_congruential_engine/seed (T... args) T min cpp/numeric/random/linear_congruential_engine/min (T... args) std::codecvt_utf16 cpp/locale/codecvt_utf16 std::codecvt_utf16::extern_type T out cpp/locale/codecvt/out (T... args) T do_length cpp/locale/codecvt/length (T... args) T do_unshift cpp/locale/codecvt/unshift (T... args) T do_encoding cpp/locale/codecvt/encoding (T... args) T do_in cpp/locale/codecvt/in (T... args) T unshift cpp/locale/codecvt/unshift (T... args) T max_length cpp/locale/codecvt/max_length (T... args) std::codecvt_utf16::state_type T encoding cpp/locale/codecvt/encoding (T... args) T always_noconv cpp/locale/codecvt/always_noconv (T... args) T do_out cpp/locale/codecvt/out (T... args) T do_max_length cpp/locale/codecvt/max_length (T... args) T do_always_noconv cpp/locale/codecvt/always_noconv (T... args) T in cpp/locale/codecvt/in (T... args) std::codecvt_utf16::intern_type T length cpp/locale/codecvt/length (T... args) std::codecvt_utf16::extern_type cpp/locale/codecvt std::codecvt_utf16::state_type cpp/locale/codecvt std::codecvt_utf16::intern_type cpp/locale/codecvt std::cmatch cpp/regex/match_results T cbegin cpp/regex/match_results/begin (T... args) T format cpp/regex/match_results/format (T... args) T size cpp/regex/match_results/size (T... args) T swap cpp/regex/match_results/swap (T... args) T position cpp/regex/match_results/position (T... args) T ~cmatch cpp/regex/match_results/~match_results (T... args) T prefix cpp/regex/match_results/prefix (T... args) T str cpp/regex/match_results/str (T... args) T empty cpp/regex/match_results/empty (T... args) T suffix cpp/regex/match_results/suffix (T... args) T get_allocator cpp/regex/match_results/get_allocator (T... args) T end cpp/regex/match_results/end (T... args) T max_size cpp/regex/match_results/max_size (T... args) T cmatch cpp/regex/match_results/match_results (T... args) T ready cpp/regex/match_results/ready (T... args) T cend cpp/regex/match_results/end (T... args) T operator[] cpp/regex/match_results/operator_at (T... args) T length cpp/regex/match_results/length (T... args) T begin cpp/regex/match_results/begin (T... args) std::defer_lock_t cpp/thread/lock_tag_t std::exception cpp/error/exception T what cpp/error/exception/what (T... args) T ~exception cpp/error/exception/~exception (T... args) T operator= cpp/error/exception/operator= (T... args) T exception cpp/error/exception/exception (T... args) std::front_insert_iterator cpp/iterator/front_insert_iterator std::zetta cpp/numeric/ratio/ratio std::streambuf cpp/io/basic_streambuf T pptr cpp/io/basic_streambuf/pptr (T... args) T epptr cpp/io/basic_streambuf/pptr (T... args) T eback cpp/io/basic_streambuf/gptr (T... args) T setp cpp/io/basic_streambuf/setp (T... args) T sputbackc cpp/io/basic_streambuf/sputbackc (T... args) T getloc cpp/io/basic_streambuf/getloc (T... args) T seekoff cpp/io/basic_streambuf/pubseekoff (T... args) T imbue cpp/io/basic_streambuf/pubimbue (T... args) T sungetc cpp/io/basic_streambuf/sungetc (T... args) T sync cpp/io/basic_streambuf/pubsync (T... args) T xsputn cpp/io/basic_streambuf/sputn (T... args) T pbase cpp/io/basic_streambuf/pptr (T... args) T sgetc cpp/io/basic_streambuf/sgetc (T... args) T pubimbue cpp/io/basic_streambuf/pubimbue (T... args) T showmanyc cpp/io/basic_streambuf/showmanyc (T... args) T snextc cpp/io/basic_streambuf/snextc (T... args) T egptr cpp/io/basic_streambuf/gptr (T... args) T seekpos cpp/io/basic_streambuf/pubseekpos (T... args) T underflow cpp/io/basic_streambuf/underflow (T... args) T setbuf cpp/io/basic_streambuf/pubsetbuf (T... args) T gbump cpp/io/basic_streambuf/gbump (T... args) T in_avail cpp/io/basic_streambuf/in_avail (T... args) T swap cpp/io/basic_streambuf/swap (T... args) T pbackfail cpp/io/basic_streambuf/pbackfail (T... args) T sputc cpp/io/basic_streambuf/sputc (T... args) T xsgetn cpp/io/basic_streambuf/sgetn (T... args) T uflow cpp/io/basic_streambuf/uflow (T... args) T overflow cpp/io/basic_streambuf/overflow (T... args) T sputn cpp/io/basic_streambuf/sputn (T... args) T sgetn cpp/io/basic_streambuf/sgetn (T... args) T sbumpc cpp/io/basic_streambuf/sbumpc (T... args) T ~streambuf cpp/io/basic_streambuf/~basic_streambuf (T... args) T operator= cpp/io/basic_streambuf/operator= (T... args) T pbump cpp/io/basic_streambuf/pbump (T... args) T pubsetbuf cpp/io/basic_streambuf/pubsetbuf (T... args) T pubsync cpp/io/basic_streambuf/pubsync (T... args) T pubseekoff cpp/io/basic_streambuf/pubseekoff (T... args) T setg cpp/io/basic_streambuf/setg (T... args) T streambuf cpp/io/basic_streambuf/basic_streambuf (T... args) T gptr cpp/io/basic_streambuf/gptr (T... args) T pubseekpos cpp/io/basic_streambuf/pubseekpos (T... args) std::experimental T make_optional cpp/experimental/optional/make_optional (T... args) std::experimental::optional std::experimental::optional cpp/experimental/optional T operator= cpp/experimental/optional/operator= (T... args) T operator bool cpp/experimental/optional/operator_bool (T... args) T optional cpp/experimental/optional/optional (T... args) T ~optional cpp/experimental/optional/~optional (T... args) T operator-> cpp/experimental/optional/operator* (T... args) T value cpp/experimental/optional/value (T... args) T value_or cpp/experimental/optional/value_or (T... args) T operator* cpp/experimental/optional/operator* (T... args) T emplace cpp/experimental/optional/emplace (T... args) T swap cpp/experimental/optional/swap (T... args) std::num_put cpp/locale/num_put T num_put cpp/locale/num_put/num_put (T... args) std::num_put::char_type T ~num_put cpp/locale/num_put/~num_put (T... args) T do_put cpp/locale/num_put/put (T... args) T put cpp/locale/num_put/put (T... args) std::num_put::iter_type std::num_put::char_type cpp/locale/num_put std::num_put::iter_type cpp/locale/num_put std::owner_less cpp/memory/owner_less T operator() cpp/memory/owner_less (T... args) std::extent cpp/types/extent std::bad_optional_access cpp/utility/bad_optional_access T bad_optional_access cpp/utility/bad_optional_access (T... args) T what cpp/error/exception/what (T... args) std::yotta cpp/numeric/ratio/ratio std::wcregex_token_iterator cpp/regex/regex_token_iterator T operator!= cpp/regex/regex_token_iterator/operator_cmp (T... args) T operator= cpp/regex/regex_token_iterator/operator= (T... args) T operator== cpp/regex/regex_token_iterator/operator_cmp (T... args) T operator-> cpp/regex/regex_token_iterator/operator* (T... args) T operator++ cpp/regex/regex_token_iterator/operator_arith (T... args) T operator* cpp/regex/regex_token_iterator/operator* (T... args) T operator++(int) cpp/regex/regex_token_iterator/operator_arith (T... args) T wcregex_token_iterator cpp/regex/regex_token_iterator/regex_token_iterator (T... args) std::uint64_t cpp/types/integer std::messages cpp/locale/messages T do_get cpp/locale/messages/get (T... args) T do_close cpp/locale/messages/close (T... args) std::messages::char_type T get cpp/locale/messages/get (T... args) T ~messages cpp/locale/messages/~messages (T... args) T do_open cpp/locale/messages/open (T... args) T messages cpp/locale/messages/messages (T... args) T open cpp/locale/messages/open (T... args) std::messages::string_type std::messages::catalog T close cpp/locale/messages/close (T... args) std::messages::char_type cpp/locale/messages std::messages::string_type cpp/locale/messages std::messages::catalog cpp/locale/messages_base std::regex_token_iterator cpp/regex/regex_token_iterator T regex_token_iterator cpp/regex/regex_token_iterator/regex_token_iterator (T... args) T operator= cpp/regex/regex_token_iterator/operator= (T... args) T operator== cpp/regex/regex_token_iterator/operator_cmp (T... args) T operator-> cpp/regex/regex_token_iterator/operator* (T... args) T operator++ cpp/regex/regex_token_iterator/operator_arith (T... args) T operator* cpp/regex/regex_token_iterator/operator* (T... args) T operator!= cpp/regex/regex_token_iterator/operator_cmp (T... args) T operator++(int) cpp/regex/regex_token_iterator/operator_arith (T... args) std::move_iterator cpp/iterator/move_iterator std::messages_base cpp/locale/messages_base std::messages_base::catalog std::messages_base::catalog cpp/locale/messages_base std::istringstream cpp/io/basic_istringstream T setstate cpp/io/basic_ios/setstate (T... args) T getloc cpp/io/ios_base/getloc (T... args) T precision cpp/io/ios_base/precision (T... args) T flags cpp/io/ios_base/flags (T... args) T str cpp/io/basic_istringstream/str (T... args) T widen cpp/io/basic_ios/widen (T... args) T readsome cpp/io/basic_istream/readsome (T... args) T fill cpp/io/basic_ios/fill (T... args) T setf cpp/io/ios_base/setf (T... args) T tie cpp/io/basic_ios/tie (T... args) T operator bool cpp/io/basic_ios/operator_bool (T... args) T copyfmt cpp/io/basic_ios/copyfmt (T... args) T sync_with_stdio cpp/io/ios_base/sync_with_stdio (T... args) T gcount cpp/io/basic_istream/gcount (T... args) T istringstream cpp/io/basic_istringstream/basic_istringstream (T... args) T get cpp/io/basic_istream/get (T... args) T xalloc cpp/io/ios_base/xalloc (T... args) T read cpp/io/basic_istream/read (T... args) T getline cpp/io/basic_istream/getline (T... args) T exceptions cpp/io/basic_ios/exceptions (T... args) T iword cpp/io/ios_base/iword (T... args) T unget cpp/io/basic_istream/unget (T... args) std::istringstream::event_callback T narrow cpp/io/basic_ios/narrow (T... args) T good cpp/io/basic_ios/good (T... args) T operator! cpp/io/basic_ios/operator! (T... args) T sync cpp/io/basic_istream/sync (T... args) T putback cpp/io/basic_istream/putback (T... args) T ignore cpp/io/basic_istream/ignore (T... args) T unsetf cpp/io/ios_base/unsetf (T... args) T width cpp/io/ios_base/width (T... args) T rdstate cpp/io/basic_ios/rdstate (T... args) T seekg cpp/io/basic_istream/seekg (T... args) std::istringstream::failure T move cpp/io/basic_ios/move (T... args) T eof cpp/io/basic_ios/eof (T... args) T register_callback cpp/io/ios_base/register_callback (T... args) T pword cpp/io/ios_base/pword (T... args) T swap cpp/io/basic_ios/swap (T... args) T tellg cpp/io/basic_istream/tellg (T... args) T operator>> cpp/io/basic_istream/operator_gtgt (T... args) T set_rdbuf cpp/io/basic_ios/set_rdbuf (T... args) T fail cpp/io/basic_ios/fail (T... args) T peek cpp/io/basic_istream/peek (T... args) T operator= cpp/io/basic_istringstream/operator= (T... args) std::istringstream::sentry T rdbuf cpp/io/basic_ios/rdbuf (T... args) T imbue cpp/io/basic_ios/imbue (T... args) T bad cpp/io/basic_ios/bad (T... args) T clear cpp/io/basic_ios/clear (T... args) T init cpp/io/basic_ios/init (T... args) std::istringstream::event_callback cpp/io/ios_base/event_callback std::istringstream::failure cpp/io/ios_base/failure T failure cpp/io/ios_base/failure (T... args) T what cpp/error/exception/what (T... args) std::istringstream::sentry cpp/io/basic_istream/sentry T ~sentry cpp/io/basic_istream/sentry (T... args) T operator bool cpp/io/basic_istream/sentry (T... args) T sentry cpp/io/basic_istream/sentry (T... args) std::giga cpp/numeric/ratio/ratio std::integer_sequence cpp/utility/integer_sequence std::has_virtual_destructor cpp/types/has_virtual_destructor std::max_align_t cpp/types/max_align_t std::remove_volatile cpp/types/remove_cv std::underlying_type cpp/types/underlying_type std::hecto cpp/numeric/ratio/ratio std::is_member_object_pointer cpp/types/is_member_object_pointer std::exception_ptr cpp/error/exception_ptr std::nested_exception cpp/error/nested_exception T operator= cpp/error/nested_exception/operator= (T... args) T ~nested_exception cpp/error/nested_exception/~nested_exception (T... args) T rethrow_nested cpp/error/nested_exception/rethrow_nested (T... args) T nested_exception cpp/error/nested_exception/nested_exception (T... args) T nested_ptr cpp/error/nested_exception/nested_ptr (T... args) std::random_access_iterator_tag cpp/iterator/iterator_tags std::ctype cpp/locale/ctype T do_toupper cpp/locale/ctype/toupper (T... args) T toupper cpp/locale/ctype/toupper (T... args) T scan_is cpp/locale/ctype/scan_is (T... args) T narrow cpp/locale/ctype/narrow (T... args) T ~ctype cpp/locale/ctype/~ctype (T... args) T do_narrow cpp/locale/ctype/narrow (T... args) T widen cpp/locale/ctype/widen (T... args) T is cpp/locale/ctype/is (T... args) T do_scan_is cpp/locale/ctype/scan_is (T... args) T tolower cpp/locale/ctype/tolower (T... args) T do_is cpp/locale/ctype/is (T... args) T do_tolower cpp/locale/ctype/tolower (T... args) std::ctype::mask T do_widen cpp/locale/ctype/widen (T... args) T ctype cpp/locale/ctype/ctype (T... args) std::ctype::mask cpp/locale/ctype_base std::time_t cpp/chrono/c/time_t std::knuth_b cpp/numeric/random/shuffle_order_engine T discard cpp/numeric/random/shuffle_order_engine/discard (T... args) T max cpp/numeric/random/shuffle_order_engine/max (T... args) T knuth_b cpp/numeric/random/shuffle_order_engine/shuffle_order_engine (T... args) T operator() cpp/numeric/random/shuffle_order_engine/operator() (T... args) T base cpp/numeric/random/shuffle_order_engine/base (T... args) T seed cpp/numeric/random/shuffle_order_engine/seed (T... args) T min cpp/numeric/random/shuffle_order_engine/min (T... args) std::auto_ptr cpp/memory/auto_ptr T release cpp/memory/auto_ptr/release (T... args) T operator* cpp/memory/auto_ptr/operator* (T... args) T operator auto_ptr<Y> cpp/memory/auto_ptr/operator_auto_ptr (T... args) T reset cpp/memory/auto_ptr/reset (T... args) T operator-> cpp/memory/auto_ptr/operator* (T... args) T operator= cpp/memory/auto_ptr/operator= (T... args) T auto_ptr cpp/memory/auto_ptr/auto_ptr (T... args) T ~auto_ptr cpp/memory/auto_ptr/~auto_ptr (T... args) T get cpp/memory/auto_ptr/get (T... args) std::minstd_rand0 cpp/numeric/random/linear_congruential_engine T discard cpp/numeric/random/linear_congruential_engine/discard (T... args) T max cpp/numeric/random/linear_congruential_engine/max (T... args) T operator() cpp/numeric/random/linear_congruential_engine/operator() (T... args) T seed cpp/numeric/random/linear_congruential_engine/seed (T... args) T min cpp/numeric/random/linear_congruential_engine/min (T... args) T minstd_rand0 cpp/numeric/random/linear_congruential_engine/linear_congruential_engine (T... args) std::sregex_token_iterator cpp/regex/regex_token_iterator T operator!= cpp/regex/regex_token_iterator/operator_cmp (T... args) T operator= cpp/regex/regex_token_iterator/operator= (T... args) T sregex_token_iterator cpp/regex/regex_token_iterator/regex_token_iterator (T... args) T operator== cpp/regex/regex_token_iterator/operator_cmp (T... args) T operator-> cpp/regex/regex_token_iterator/operator* (T... args) T operator++ cpp/regex/regex_token_iterator/operator_arith (T... args) T operator* cpp/regex/regex_token_iterator/operator* (T... args) T operator++(int) cpp/regex/regex_token_iterator/operator_arith (T... args) std::logical_not cpp/utility/functional/logical_not T operator() cpp/utility/functional/logical_not (T... args) std::fpos_t cpp/io/c std::istream cpp/io/basic_istream T setstate cpp/io/basic_ios/setstate (T... args) T getloc cpp/io/ios_base/getloc (T... args) T ~istream cpp/io/basic_istream/~basic_istream (T... args) T istream cpp/io/basic_istream/basic_istream (T... args) T flags cpp/io/ios_base/flags (T... args) T widen cpp/io/basic_ios/widen (T... args) T seekg cpp/io/basic_istream/seekg (T... args) T operator>> cpp/io/basic_istream/operator_gtgt (T... args) T read cpp/io/basic_istream/read (T... args) T fill cpp/io/basic_ios/fill (T... args) T setf cpp/io/ios_base/setf (T... args) std::istream::event_callback T operator bool cpp/io/basic_ios/operator_bool (T... args) T copyfmt cpp/io/basic_ios/copyfmt (T... args) T sync_with_stdio cpp/io/ios_base/sync_with_stdio (T... args) T getline cpp/io/basic_istream/getline (T... args) T gcount cpp/io/basic_istream/gcount (T... args) T eof cpp/io/basic_ios/eof (T... args) T xalloc cpp/io/ios_base/xalloc (T... args) T precision cpp/io/ios_base/precision (T... args) T exceptions cpp/io/basic_ios/exceptions (T... args) T iword cpp/io/ios_base/iword (T... args) T unget cpp/io/basic_istream/unget (T... args) T rdbuf cpp/io/basic_ios/rdbuf (T... args) T narrow cpp/io/basic_ios/narrow (T... args) T good cpp/io/basic_ios/good (T... args) T operator! cpp/io/basic_ios/operator! (T... args) T sync cpp/io/basic_istream/sync (T... args) T putback cpp/io/basic_istream/putback (T... args) T ignore cpp/io/basic_istream/ignore (T... args) T unsetf cpp/io/ios_base/unsetf (T... args) T width cpp/io/ios_base/width (T... args) T rdstate cpp/io/basic_ios/rdstate (T... args) T tie cpp/io/basic_ios/tie (T... args) std::istream::failure T move cpp/io/basic_ios/move (T... args) T get cpp/io/basic_istream/get (T... args) T register_callback cpp/io/ios_base/register_callback (T... args) T pword cpp/io/ios_base/pword (T... args) T swap cpp/io/basic_ios/swap (T... args) T readsome cpp/io/basic_istream/readsome (T... args) T tellg cpp/io/basic_istream/tellg (T... args) T set_rdbuf cpp/io/basic_ios/set_rdbuf (T... args) T fail cpp/io/basic_ios/fail (T... args) T peek cpp/io/basic_istream/peek (T... args) std::istream::sentry T imbue cpp/io/basic_ios/imbue (T... args) T bad cpp/io/basic_ios/bad (T... args) T clear cpp/io/basic_ios/clear (T... args) T init cpp/io/basic_ios/init (T... args) std::istream::event_callback cpp/io/ios_base/event_callback std::istream::failure cpp/io/ios_base/failure T failure cpp/io/ios_base/failure (T... args) T what cpp/error/exception/what (T... args) std::istream::sentry cpp/io/basic_istream/sentry T ~sentry cpp/io/basic_istream/sentry (T... args) T operator bool cpp/io/basic_istream/sentry (T... args) T sentry cpp/io/basic_istream/sentry (T... args) std::seed_seq cpp/numeric/random/seed_seq T generate cpp/numeric/random/seed_seq/generate (T... args) T param cpp/numeric/random/seed_seq/param (T... args) T size cpp/numeric/random/seed_seq/size (T... args) T seed_seq cpp/numeric/random/seed_seq/seed_seq (T... args) std::default_delete cpp/memory/default_delete T default_delete cpp/memory/default_delete (T... args) T operator() cpp/memory/default_delete (T... args) std::femto cpp/numeric/ratio/ratio std::clock_t cpp/chrono/c/clock_t std::true_type cpp/types/integral_constant std::mbstate_t cpp/string/multibyte/mbstate_t std::ostrstream cpp/io/ostrstream T seekp cpp/io/basic_ostream/seekp (T... args) T setstate cpp/io/basic_ios/setstate (T... args) T getloc cpp/io/ios_base/getloc (T... args) T precision cpp/io/ios_base/precision (T... args) T flags cpp/io/ios_base/flags (T... args) T str cpp/io/ostrstream/str (T... args) T widen cpp/io/basic_ios/widen (T... args) T fill cpp/io/basic_ios/fill (T... args) T setf cpp/io/ios_base/setf (T... args) std::ostrstream::event_callback T pcount cpp/io/ostrstream/pcount (T... args) T ostrstream cpp/io/ostrstream/ostrstream (T... args) T good cpp/io/basic_ios/good (T... args) T copyfmt cpp/io/basic_ios/copyfmt (T... args) T tellp cpp/io/basic_ostream/tellp (T... args) T sync_with_stdio cpp/io/ios_base/sync_with_stdio (T... args) T xalloc cpp/io/ios_base/xalloc (T... args) T exceptions cpp/io/basic_ios/exceptions (T... args) T iword cpp/io/ios_base/iword (T... args) T operator<< cpp/io/basic_ostream/operator_ltlt (T... args) T narrow cpp/io/basic_ios/narrow (T... args) T operator bool cpp/io/basic_ios/operator_bool (T... args) T operator! cpp/io/basic_ios/operator! (T... args) T write cpp/io/basic_ostream/write (T... args) T unsetf cpp/io/ios_base/unsetf (T... args) T width cpp/io/ios_base/width (T... args) T rdstate cpp/io/basic_ios/rdstate (T... args) T tie cpp/io/basic_ios/tie (T... args) std::ostrstream::failure T move cpp/io/basic_ios/move (T... args) T eof cpp/io/basic_ios/eof (T... args) T register_callback cpp/io/ios_base/register_callback (T... args) T pword cpp/io/ios_base/pword (T... args) T flush cpp/io/basic_ostream/flush (T... args) T set_rdbuf cpp/io/basic_ios/set_rdbuf (T... args) T freeze cpp/io/ostrstream/freeze (T... args) T fail cpp/io/basic_ios/fail (T... args) T ~ostrstream cpp/io/ostrstream/~ostrstream (T... args) T swap cpp/io/basic_ios/swap (T... args) T rdbuf cpp/io/basic_ios/rdbuf (T... args) T imbue cpp/io/basic_ios/imbue (T... args) T bad cpp/io/basic_ios/bad (T... args) T clear cpp/io/basic_ios/clear (T... args) std::ostrstream::sentry T put cpp/io/basic_ostream/put (T... args) T init cpp/io/basic_ios/init (T... args) std::ostrstream::event_callback cpp/io/ios_base/event_callback std::ostrstream::failure cpp/io/ios_base/failure T failure cpp/io/ios_base/failure (T... args) T what cpp/error/exception/what (T... args) std::ostrstream::sentry cpp/io/basic_ostream/sentry T ~sentry cpp/io/basic_ostream/sentry (T... args) T operator bool cpp/io/basic_ostream/sentry (T... args) T sentry cpp/io/basic_ostream/sentry (T... args) std::gamma_distribution cpp/numeric/random/gamma_distribution T gamma_distribution cpp/numeric/random/gamma_distribution/gamma_distribution (T... args) T max cpp/numeric/random/gamma_distribution/max (T... args) T operator() cpp/numeric/random/gamma_distribution/operator() (T... args) T reset cpp/numeric/random/gamma_distribution/reset (T... args) T alpha cpp/numeric/random/gamma_distribution/params (T... args) T beta cpp/numeric/random/gamma_distribution/params (T... args) T param cpp/numeric/random/gamma_distribution/param (T... args) T min cpp/numeric/random/gamma_distribution/min (T... args) std::bad_weak_ptr cpp/memory/bad_weak_ptr T bad_weak_ptr cpp/memory/bad_weak_ptr/bad_weak_ptr (T... args) T what cpp/error/exception/what (T... args) std::output_iterator_tag cpp/iterator/iterator_tags std::micro cpp/numeric/ratio/ratio std::is_trivial cpp/types/is_trivial std::packaged_task cpp/thread/packaged_task T operator= cpp/thread/packaged_task/operator= (T... args) T swap cpp/thread/packaged_task/swap (T... args) T reset cpp/thread/packaged_task/reset (T... args) T packaged_task cpp/thread/packaged_task/packaged_task (T... args) T make_ready_at_thread_exit cpp/thread/packaged_task/make_ready_at_thread_exit (T... args) T operator() cpp/thread/packaged_task/operator() (T... args) T get_future cpp/thread/packaged_task/get_future (T... args) T valid cpp/thread/packaged_task/valid (T... args) T ~packaged_task cpp/thread/packaged_task/~packaged_task (T... args) std::unordered_set cpp/container/unordered_set T max_bucket_count cpp/container/unordered_set/max_bucket_count (T... args) T cbegin cpp/container/unordered_set/begin (T... args) T erase cpp/container/unordered_set/erase (T... args) T insert cpp/container/unordered_set/insert (T... args) T bucket_count cpp/container/unordered_set/bucket_count (T... args) T max_load_factor cpp/container/unordered_set/max_load_factor (T... args) T end cpp/container/unordered_set/end (T... args) T emplace_hint cpp/container/unordered_set/emplace_hint (T... args) T end(int) cpp/container/unordered_set/end2 (T... args) T ~unordered_set cpp/container/unordered_set/~unordered_set (T... args) T key_eq cpp/container/unordered_set/key_eq (T... args) T hash_function cpp/container/unordered_set/hash_function (T... args) T find cpp/container/unordered_set/find (T... args) T clear cpp/container/unordered_set/clear (T... args) T begin cpp/container/unordered_set/begin (T... args) T cbegin(int) cpp/container/unordered_set/begin2 (T... args) T swap cpp/container/unordered_set/swap (T... args) T begin(int) cpp/container/unordered_set/begin2 (T... args) T load_factor cpp/container/unordered_set/load_factor (T... args) T size cpp/container/unordered_set/size (T... args) T operator= cpp/container/unordered_set/operator= (T... args) T cend cpp/container/unordered_set/end (T... args) T reserve cpp/container/unordered_set/reserve (T... args) T rehash cpp/container/unordered_set/rehash (T... args) T bucket cpp/container/unordered_set/bucket (T... args) T empty cpp/container/unordered_set/empty (T... args) T get_allocator cpp/container/unordered_set/get_allocator (T... args) T max_size cpp/container/unordered_set/max_size (T... args) T cend(int) cpp/container/unordered_set/end2 (T... args) T count cpp/container/unordered_set/count (T... args) T unordered_set cpp/container/unordered_set/unordered_set (T... args) T equal_range cpp/container/unordered_set/equal_range (T... args) T emplace cpp/container/unordered_set/emplace (T... args) T bucket_size cpp/container/unordered_set/bucket_size (T... args) std::is_volatile cpp/types/is_volatile std::wfstream cpp/io/basic_fstream T seekp cpp/io/basic_ostream/seekp (T... args) T setstate cpp/io/basic_ios/setstate (T... args) T getloc cpp/io/ios_base/getloc (T... args) T precision cpp/io/ios_base/precision (T... args) T width cpp/io/ios_base/width (T... args) T flags cpp/io/ios_base/flags (T... args) T widen cpp/io/basic_ios/widen (T... args) T operator>> cpp/io/basic_istream/operator_gtgt (T... args) T fill cpp/io/basic_ios/fill (T... args) T setf cpp/io/ios_base/setf (T... args) T seekg cpp/io/basic_istream/seekg (T... args) T open cpp/io/basic_fstream/open (T... args) T good cpp/io/basic_ios/good (T... args) T copyfmt cpp/io/basic_ios/copyfmt (T... args) T tellp cpp/io/basic_ostream/tellp (T... args) T sync_with_stdio cpp/io/ios_base/sync_with_stdio (T... args) T gcount cpp/io/basic_istream/gcount (T... args) T unget cpp/io/basic_istream/unget (T... args) T xalloc cpp/io/ios_base/xalloc (T... args) T read cpp/io/basic_istream/read (T... args) T getline cpp/io/basic_istream/getline (T... args) T eof cpp/io/basic_ios/eof (T... args) T exceptions cpp/io/basic_ios/exceptions (T... args) std::wfstream::sentry T register_callback cpp/io/ios_base/register_callback (T... args) T wfstream cpp/io/basic_fstream/basic_fstream (T... args) T operator<< cpp/io/basic_ostream/operator_ltlt (T... args) std::wfstream::event_callback T narrow cpp/io/basic_ios/narrow (T... args) T operator bool cpp/io/basic_ios/operator_bool (T... args) T write cpp/io/basic_ostream/write (T... args) T close cpp/io/basic_fstream/close (T... args) T sync cpp/io/basic_istream/sync (T... args) T putback cpp/io/basic_istream/putback (T... args) T ignore cpp/io/basic_istream/ignore (T... args) T unsetf cpp/io/ios_base/unsetf (T... args) T readsome cpp/io/basic_istream/readsome (T... args) T rdstate cpp/io/basic_ios/rdstate (T... args) T tie cpp/io/basic_ios/tie (T... args) std::wfstream::failure T move cpp/io/basic_ios/move (T... args) T get cpp/io/basic_istream/get (T... args) T operator! cpp/io/basic_ios/operator! (T... args) T pword cpp/io/ios_base/pword (T... args) T swap cpp/io/basic_ios/swap (T... args) T flush cpp/io/basic_ostream/flush (T... args) T tellg cpp/io/basic_istream/tellg (T... args) T set_rdbuf cpp/io/basic_ios/set_rdbuf (T... args) T fail cpp/io/basic_ios/fail (T... args) T is_open cpp/io/basic_fstream/is_open (T... args) T peek cpp/io/basic_istream/peek (T... args) T operator= cpp/io/basic_fstream/operator= (T... args) T iword cpp/io/ios_base/iword (T... args) T rdbuf cpp/io/basic_ios/rdbuf (T... args) T imbue cpp/io/basic_ios/imbue (T... args) T bad cpp/io/basic_ios/bad (T... args) T clear cpp/io/basic_ios/clear (T... args) T put cpp/io/basic_ostream/put (T... args) T init cpp/io/basic_ios/init (T... args) std::wfstream::sentry cpp/io/basic_ostream/sentry T ~sentry cpp/io/basic_istream/sentry (T... args) T operator bool cpp/io/basic_istream/sentry (T... args) T sentry cpp/io/basic_istream/sentry (T... args) std::wfstream::event_callback cpp/io/ios_base/event_callback std::wfstream::failure cpp/io/ios_base/failure T failure cpp/io/ios_base/failure (T... args) T what cpp/error/exception/what (T... args) std::multimap cpp/container/multimap T multimap cpp/container/multimap/multimap (T... args) T begin cpp/container/multimap/begin (T... args) T erase cpp/container/multimap/erase (T... args) T insert cpp/container/multimap/insert (T... args) T swap cpp/container/multimap/swap (T... args) T end cpp/container/multimap/end (T... args) T ~multimap cpp/container/multimap/~multimap (T... args) T emplace_hint cpp/container/multimap/emplace_hint (T... args) T key_comp cpp/container/multimap/key_comp (T... args) std::multimap::value_compare T cbegin cpp/container/multimap/begin (T... args) T count cpp/container/multimap/count (T... args) T find cpp/container/multimap/find (T... args) T crbegin cpp/container/multimap/rbegin (T... args) T upper_bound cpp/container/multimap/upper_bound (T... args) T rbegin cpp/container/multimap/rbegin (T... args) T crend cpp/container/multimap/rend (T... args) T size cpp/container/multimap/size (T... args) T operator= cpp/container/multimap/operator= (T... args) T value_comp cpp/container/multimap/value_comp (T... args) T empty cpp/container/multimap/empty (T... args) T lower_bound cpp/container/multimap/lower_bound (T... args) T cend cpp/container/multimap/end (T... args) T max_size cpp/container/multimap/max_size (T... args) T rend cpp/container/multimap/rend (T... args) T get_allocator cpp/container/multimap/get_allocator (T... args) T clear cpp/container/multimap/clear (T... args) T equal_range cpp/container/multimap/equal_range (T... args) T emplace cpp/container/multimap/emplace (T... args) std::multimap::value_compare cpp/container/multimap/value_compare std::atomic_flag cpp/atomic/atomic_flag T operator= cpp/atomic/atomic_flag/operator= (T... args) T clear cpp/atomic/atomic_flag/clear (T... args) T atomic_flag cpp/atomic/atomic_flag/atomic_flag (T... args) T test_and_set cpp/atomic/atomic_flag/test_and_set (T... args) std::numpunct_byname cpp/locale/numpunct_byname T grouping cpp/locale/numpunct/grouping (T... args) T do_decimal_point cpp/locale/numpunct/decimal_point (T... args) T thousands_sep cpp/locale/numpunct/thousands_sep (T... args) T falsename cpp/locale/numpunct/truefalsename (T... args) T do_falsename cpp/locale/numpunct/truefalsename (T... args) std::numpunct_byname::string_type T numpunct_byname cpp/locale/numpunct_byname (T... args) T truename cpp/locale/numpunct/truefalsename (T... args) std::numpunct_byname::char_type T do_truename cpp/locale/numpunct/truefalsename (T... args) T do_grouping cpp/locale/numpunct/grouping (T... args) T decimal_point cpp/locale/numpunct/decimal_point (T... args) T do_thousands_sep cpp/locale/numpunct/thousands_sep (T... args) T ~numpunct_byname cpp/locale/numpunct_byname (T... args) std::numpunct_byname::string_type cpp/locale/numpunct std::numpunct_byname::char_type cpp/locale/numpunct std::binomial_distribution cpp/numeric/random/binomial_distribution T t cpp/numeric/random/binomial_distribution/params (T... args) T binomial_distribution cpp/numeric/random/binomial_distribution/binomial_distribution (T... args) T reset cpp/numeric/random/binomial_distribution/reset (T... args) T max cpp/numeric/random/binomial_distribution/max (T... args) T p cpp/numeric/random/binomial_distribution/params (T... args) T min cpp/numeric/random/binomial_distribution/min (T... args) T param cpp/numeric/random/binomial_distribution/param (T... args) std::basic_iostream cpp/io/basic_iostream T seekp cpp/io/basic_ostream/seekp (T... args) T setstate cpp/io/basic_ios/setstate (T... args) T getloc cpp/io/ios_base/getloc (T... args) T precision cpp/io/ios_base/precision (T... args) T width cpp/io/ios_base/width (T... args) T flags cpp/io/ios_base/flags (T... args) T widen cpp/io/basic_ios/widen (T... args) T operator>> cpp/io/basic_istream/operator_gtgt (T... args) T fill cpp/io/basic_ios/fill (T... args) T setf cpp/io/ios_base/setf (T... args) T seekg cpp/io/basic_istream/seekg (T... args) T good cpp/io/basic_ios/good (T... args) T copyfmt cpp/io/basic_ios/copyfmt (T... args) T tellp cpp/io/basic_ostream/tellp (T... args) T sync_with_stdio cpp/io/ios_base/sync_with_stdio (T... args) T gcount cpp/io/basic_istream/gcount (T... args) T ~basic_iostream cpp/io/basic_iostream/~basic_iostream (T... args) T unget cpp/io/basic_istream/unget (T... args) T xalloc cpp/io/ios_base/xalloc (T... args) T read cpp/io/basic_istream/read (T... args) T getline cpp/io/basic_istream/getline (T... args) T eof cpp/io/basic_ios/eof (T... args) T exceptions cpp/io/basic_ios/exceptions (T... args) std::basic_iostream::sentry T register_callback cpp/io/ios_base/register_callback (T... args) T operator<< cpp/io/basic_ostream/operator_ltlt (T... args) std::basic_iostream::event_callback T narrow cpp/io/basic_ios/narrow (T... args) T operator bool cpp/io/basic_ios/operator_bool (T... args) T write cpp/io/basic_ostream/write (T... args) T sync cpp/io/basic_istream/sync (T... args) T putback cpp/io/basic_istream/putback (T... args) T basic_iostream cpp/io/basic_iostream/basic_iostream (T... args) T ignore cpp/io/basic_istream/ignore (T... args) T unsetf cpp/io/ios_base/unsetf (T... args) T readsome cpp/io/basic_istream/readsome (T... args) T rdstate cpp/io/basic_ios/rdstate (T... args) T tie cpp/io/basic_ios/tie (T... args) std::basic_iostream::failure T move cpp/io/basic_ios/move (T... args) T get cpp/io/basic_istream/get (T... args) T operator! cpp/io/basic_ios/operator! (T... args) T pword cpp/io/ios_base/pword (T... args) T swap cpp/io/basic_ios/swap (T... args) T flush cpp/io/basic_ostream/flush (T... args) T tellg cpp/io/basic_istream/tellg (T... args) T set_rdbuf cpp/io/basic_ios/set_rdbuf (T... args) T fail cpp/io/basic_ios/fail (T... args) T peek cpp/io/basic_istream/peek (T... args) T iword cpp/io/ios_base/iword (T... args) T rdbuf cpp/io/basic_ios/rdbuf (T... args) T imbue cpp/io/basic_ios/imbue (T... args) T bad cpp/io/basic_ios/bad (T... args) T clear cpp/io/basic_ios/clear (T... args) T put cpp/io/basic_ostream/put (T... args) T init cpp/io/basic_ios/init (T... args) std::basic_iostream::sentry cpp/io/basic_ostream/sentry T ~sentry cpp/io/basic_istream/sentry (T... args) T operator bool cpp/io/basic_istream/sentry (T... args) T sentry cpp/io/basic_istream/sentry (T... args) std::basic_iostream::event_callback cpp/io/ios_base/event_callback std::basic_iostream::failure cpp/io/ios_base/failure T failure cpp/io/ios_base/failure (T... args) T what cpp/error/exception/what (T... args) std::wofstream cpp/io/basic_ofstream T seekp cpp/io/basic_ostream/seekp (T... args) T setstate cpp/io/basic_ios/setstate (T... args) T getloc cpp/io/ios_base/getloc (T... args) T precision cpp/io/ios_base/precision (T... args) T flags cpp/io/ios_base/flags (T... args) T widen cpp/io/basic_ios/widen (T... args) T fill cpp/io/basic_ios/fill (T... args) T setf cpp/io/ios_base/setf (T... args) std::wofstream::event_callback T open cpp/io/basic_ofstream/open (T... args) T good cpp/io/basic_ios/good (T... args) T copyfmt cpp/io/basic_ios/copyfmt (T... args) T tellp cpp/io/basic_ostream/tellp (T... args) T sync_with_stdio cpp/io/ios_base/sync_with_stdio (T... args) T xalloc cpp/io/ios_base/xalloc (T... args) T wofstream cpp/io/basic_ofstream/basic_ofstream (T... args) T exceptions cpp/io/basic_ios/exceptions (T... args) T iword cpp/io/ios_base/iword (T... args) T operator<< cpp/io/basic_ostream/operator_ltlt (T... args) T narrow cpp/io/basic_ios/narrow (T... args) T operator bool cpp/io/basic_ios/operator_bool (T... args) T operator! cpp/io/basic_ios/operator! (T... args) T close cpp/io/basic_ofstream/close (T... args) T write cpp/io/basic_ostream/write (T... args) T unsetf cpp/io/ios_base/unsetf (T... args) T width cpp/io/ios_base/width (T... args) T rdstate cpp/io/basic_ios/rdstate (T... args) T tie cpp/io/basic_ios/tie (T... args) std::wofstream::failure T move cpp/io/basic_ios/move (T... args) T eof cpp/io/basic_ios/eof (T... args) T register_callback cpp/io/ios_base/register_callback (T... args) T pword cpp/io/ios_base/pword (T... args) T flush cpp/io/basic_ostream/flush (T... args) T set_rdbuf cpp/io/basic_ios/set_rdbuf (T... args) T fail cpp/io/basic_ios/fail (T... args) T is_open cpp/io/basic_ofstream/is_open (T... args) T operator= cpp/io/basic_ofstream/operator= (T... args) T swap cpp/io/basic_ios/swap (T... args) T rdbuf cpp/io/basic_ios/rdbuf (T... args) T imbue cpp/io/basic_ios/imbue (T... args) T bad cpp/io/basic_ios/bad (T... args) T clear cpp/io/basic_ios/clear (T... args) std::wofstream::sentry T put cpp/io/basic_ostream/put (T... args) T init cpp/io/basic_ios/init (T... args) std::wofstream::event_callback cpp/io/ios_base/event_callback std::wofstream::failure cpp/io/ios_base/failure T failure cpp/io/ios_base/failure (T... args) T what cpp/error/exception/what (T... args) std::wofstream::sentry cpp/io/basic_ostream/sentry T ~sentry cpp/io/basic_ostream/sentry (T... args) T operator bool cpp/io/basic_ostream/sentry (T... args) T sentry cpp/io/basic_ostream/sentry (T... args) std::fpos cpp/io/fpos T state cpp/io/fpos/state (T... args) std::underflow_error cpp/error/underflow_error T underflow_error cpp/error/underflow_error (T... args) T what cpp/error/exception/what (T... args) std::cauchy_distribution cpp/numeric/random/cauchy_distribution T min cpp/numeric/random/cauchy_distribution/min (T... args) T reset cpp/numeric/random/cauchy_distribution/reset (T... args) T a cpp/numeric/random/cauchy_distribution/params (T... args) T max cpp/numeric/random/cauchy_distribution/max (T... args) T operator() cpp/numeric/random/cauchy_distribution/operator() (T... args) T param cpp/numeric/random/cauchy_distribution/param (T... args) T cauchy_distribution cpp/numeric/random/cauchy_distribution/cauchy_distribution (T... args) T b cpp/numeric/random/cauchy_distribution/params (T... args) std::is_trivially_copy_constructible cpp/types/is_copy_constructible std::conditional cpp/types/conditional std::is_pod cpp/types/is_pod std::int_least8_t cpp/types/integer std::streamoff cpp/io/streamoff std::is_move_assignable cpp/types/is_move_assignable std::int_least32_t cpp/types/integer std::wstringstream cpp/io/basic_stringstream T seekp cpp/io/basic_ostream/seekp (T... args) T setstate cpp/io/basic_ios/setstate (T... args) T getloc cpp/io/ios_base/getloc (T... args) T precision cpp/io/ios_base/precision (T... args) T width cpp/io/ios_base/width (T... args) T flags cpp/io/ios_base/flags (T... args) T str cpp/io/basic_stringstream/str (T... args) T widen cpp/io/basic_ios/widen (T... args) T operator>> cpp/io/basic_istream/operator_gtgt (T... args) T fill cpp/io/basic_ios/fill (T... args) T setf cpp/io/ios_base/setf (T... args) T seekg cpp/io/basic_istream/seekg (T... args) T good cpp/io/basic_ios/good (T... args) T copyfmt cpp/io/basic_ios/copyfmt (T... args) T tellp cpp/io/basic_ostream/tellp (T... args) T sync_with_stdio cpp/io/ios_base/sync_with_stdio (T... args) T gcount cpp/io/basic_istream/gcount (T... args) T unget cpp/io/basic_istream/unget (T... args) T xalloc cpp/io/ios_base/xalloc (T... args) T read cpp/io/basic_istream/read (T... args) T getline cpp/io/basic_istream/getline (T... args) T eof cpp/io/basic_ios/eof (T... args) T exceptions cpp/io/basic_ios/exceptions (T... args) std::wstringstream::sentry T register_callback cpp/io/ios_base/register_callback (T... args) T operator<< cpp/io/basic_ostream/operator_ltlt (T... args) std::wstringstream::event_callback T narrow cpp/io/basic_ios/narrow (T... args) T operator bool cpp/io/basic_ios/operator_bool (T... args) T write cpp/io/basic_ostream/write (T... args) T sync cpp/io/basic_istream/sync (T... args) T putback cpp/io/basic_istream/putback (T... args) T ignore cpp/io/basic_istream/ignore (T... args) T unsetf cpp/io/ios_base/unsetf (T... args) T readsome cpp/io/basic_istream/readsome (T... args) T rdstate cpp/io/basic_ios/rdstate (T... args) T tie cpp/io/basic_ios/tie (T... args) std::wstringstream::failure T move cpp/io/basic_ios/move (T... args) T get cpp/io/basic_istream/get (T... args) T operator! cpp/io/basic_ios/operator! (T... args) T pword cpp/io/ios_base/pword (T... args) T swap cpp/io/basic_ios/swap (T... args) T flush cpp/io/basic_ostream/flush (T... args) T tellg cpp/io/basic_istream/tellg (T... args) T set_rdbuf cpp/io/basic_ios/set_rdbuf (T... args) T fail cpp/io/basic_ios/fail (T... args) T peek cpp/io/basic_istream/peek (T... args) T operator= cpp/io/basic_stringstream/operator= (T... args) T wstringstream cpp/io/basic_stringstream/basic_stringstream (T... args) T iword cpp/io/ios_base/iword (T... args) T rdbuf cpp/io/basic_ios/rdbuf (T... args) T imbue cpp/io/basic_ios/imbue (T... args) T bad cpp/io/basic_ios/bad (T... args) T clear cpp/io/basic_ios/clear (T... args) T put cpp/io/basic_ostream/put (T... args) T init cpp/io/basic_ios/init (T... args) std::wstringstream::sentry cpp/io/basic_ostream/sentry T ~sentry cpp/io/basic_istream/sentry (T... args) T operator bool cpp/io/basic_istream/sentry (T... args) T sentry cpp/io/basic_istream/sentry (T... args) std::wstringstream::event_callback cpp/io/ios_base/event_callback std::wstringstream::failure cpp/io/ios_base/failure T failure cpp/io/ios_base/failure (T... args) T what cpp/error/exception/what (T... args) std::subtract_with_carry_engine cpp/numeric/random/subtract_with_carry_engine T discard cpp/numeric/random/subtract_with_carry_engine/discard (T... args) T subtract_with_carry_engine cpp/numeric/random/subtract_with_carry_engine/subtract_with_carry_engine (T... args) T max cpp/numeric/random/subtract_with_carry_engine/max (T... args) T operator() cpp/numeric/random/subtract_with_carry_engine/operator() (T... args) T seed cpp/numeric/random/subtract_with_carry_engine/seed (T... args) T min cpp/numeric/random/subtract_with_carry_engine/min (T... args) std::regex_error cpp/regex/regex_error T code cpp/regex/regex_error/code (T... args) T regex_error cpp/regex/regex_error/regex_error (T... args) T what cpp/error/exception/what (T... args) std::is_constructible cpp/types/is_constructible std::piecewise_construct_t cpp/utility/piecewise_construct_t std::mutex cpp/thread/mutex T mutex cpp/thread/mutex/mutex (T... args) T unlock cpp/thread/mutex/unlock (T... args) T lock cpp/thread/mutex/lock (T... args) T try_lock cpp/thread/mutex/try_lock (T... args) T native_handle cpp/thread/mutex/native_handle (T... args) std::system_error cpp/error/system_error T code cpp/error/system_error/code (T... args) T system_error cpp/error/system_error/system_error (T... args) T what cpp/error/exception/what (T... args) std::wistringstream cpp/io/basic_istringstream T setstate cpp/io/basic_ios/setstate (T... args) T getloc cpp/io/ios_base/getloc (T... args) T precision cpp/io/ios_base/precision (T... args) T flags cpp/io/ios_base/flags (T... args) T str cpp/io/basic_istringstream/str (T... args) T widen cpp/io/basic_ios/widen (T... args) T readsome cpp/io/basic_istream/readsome (T... args) T fill cpp/io/basic_ios/fill (T... args) T setf cpp/io/ios_base/setf (T... args) T tie cpp/io/basic_ios/tie (T... args) T operator bool cpp/io/basic_ios/operator_bool (T... args) T copyfmt cpp/io/basic_ios/copyfmt (T... args) T wistringstream cpp/io/basic_istringstream/basic_istringstream (T... args) T sync_with_stdio cpp/io/ios_base/sync_with_stdio (T... args) T gcount cpp/io/basic_istream/gcount (T... args) T get cpp/io/basic_istream/get (T... args) T xalloc cpp/io/ios_base/xalloc (T... args) T read cpp/io/basic_istream/read (T... args) T getline cpp/io/basic_istream/getline (T... args) T exceptions cpp/io/basic_ios/exceptions (T... args) T iword cpp/io/ios_base/iword (T... args) T unget cpp/io/basic_istream/unget (T... args) std::wistringstream::event_callback T narrow cpp/io/basic_ios/narrow (T... args) T good cpp/io/basic_ios/good (T... args) T operator! cpp/io/basic_ios/operator! (T... args) T sync cpp/io/basic_istream/sync (T... args) T putback cpp/io/basic_istream/putback (T... args) T ignore cpp/io/basic_istream/ignore (T... args) T unsetf cpp/io/ios_base/unsetf (T... args) T width cpp/io/ios_base/width (T... args) T rdstate cpp/io/basic_ios/rdstate (T... args) T seekg cpp/io/basic_istream/seekg (T... args) std::wistringstream::failure T move cpp/io/basic_ios/move (T... args) T eof cpp/io/basic_ios/eof (T... args) T register_callback cpp/io/ios_base/register_callback (T... args) T pword cpp/io/ios_base/pword (T... args) T swap cpp/io/basic_ios/swap (T... args) T tellg cpp/io/basic_istream/tellg (T... args) T operator>> cpp/io/basic_istream/operator_gtgt (T... args) T set_rdbuf cpp/io/basic_ios/set_rdbuf (T... args) T fail cpp/io/basic_ios/fail (T... args) T peek cpp/io/basic_istream/peek (T... args) T operator= cpp/io/basic_istringstream/operator= (T... args) std::wistringstream::sentry T rdbuf cpp/io/basic_ios/rdbuf (T... args) T imbue cpp/io/basic_ios/imbue (T... args) T bad cpp/io/basic_ios/bad (T... args) T clear cpp/io/basic_ios/clear (T... args) T init cpp/io/basic_ios/init (T... args) std::wistringstream::event_callback cpp/io/ios_base/event_callback std::wistringstream::failure cpp/io/ios_base/failure T failure cpp/io/ios_base/failure (T... args) T what cpp/error/exception/what (T... args) std::wistringstream::sentry cpp/io/basic_istream/sentry T ~sentry cpp/io/basic_istream/sentry (T... args) T operator bool cpp/io/basic_istream/sentry (T... args) T sentry cpp/io/basic_istream/sentry (T... args) std::is_floating_point cpp/types/is_floating_point std::ratio_not_equal cpp/numeric/ratio/ratio_not_equal std::ratio_multiply cpp/numeric/ratio/ratio_multiply std::result_of cpp/types/result_of std::is_fundamental cpp/types/is_fundamental std::ifstream cpp/io/basic_ifstream T setstate cpp/io/basic_ios/setstate (T... args) T getloc cpp/io/ios_base/getloc (T... args) T precision cpp/io/ios_base/precision (T... args) T flags cpp/io/ios_base/flags (T... args) T widen cpp/io/basic_ios/widen (T... args) T readsome cpp/io/basic_istream/readsome (T... args) T fill cpp/io/basic_ios/fill (T... args) T setf cpp/io/ios_base/setf (T... args) T tie cpp/io/basic_ios/tie (T... args) T open cpp/io/basic_ifstream/open (T... args) T operator bool cpp/io/basic_ios/operator_bool (T... args) T copyfmt cpp/io/basic_ios/copyfmt (T... args) T sync_with_stdio cpp/io/ios_base/sync_with_stdio (T... args) T gcount cpp/io/basic_istream/gcount (T... args) T get cpp/io/basic_istream/get (T... args) T xalloc cpp/io/ios_base/xalloc (T... args) T read cpp/io/basic_istream/read (T... args) T getline cpp/io/basic_istream/getline (T... args) T exceptions cpp/io/basic_ios/exceptions (T... args) T iword cpp/io/ios_base/iword (T... args) T unget cpp/io/basic_istream/unget (T... args) std::ifstream::event_callback T narrow cpp/io/basic_ios/narrow (T... args) T ifstream cpp/io/basic_ifstream/basic_ifstream (T... args) T good cpp/io/basic_ios/good (T... args) T operator! cpp/io/basic_ios/operator! (T... args) T close cpp/io/basic_ifstream/close (T... args) T sync cpp/io/basic_istream/sync (T... args) T putback cpp/io/basic_istream/putback (T... args) T ignore cpp/io/basic_istream/ignore (T... args) T unsetf cpp/io/ios_base/unsetf (T... args) T width cpp/io/ios_base/width (T... args) T rdstate cpp/io/basic_ios/rdstate (T... args) T seekg cpp/io/basic_istream/seekg (T... args) std::ifstream::failure T move cpp/io/basic_ios/move (T... args) T eof cpp/io/basic_ios/eof (T... args) T register_callback cpp/io/ios_base/register_callback (T... args) T pword cpp/io/ios_base/pword (T... args) T swap cpp/io/basic_ios/swap (T... args) T tellg cpp/io/basic_istream/tellg (T... args) T operator>> cpp/io/basic_istream/operator_gtgt (T... args) T set_rdbuf cpp/io/basic_ios/set_rdbuf (T... args) T fail cpp/io/basic_ios/fail (T... args) T is_open cpp/io/basic_ifstream/is_open (T... args) T peek cpp/io/basic_istream/peek (T... args) T operator= cpp/io/basic_ifstream/operator= (T... args) std::ifstream::sentry T rdbuf cpp/io/basic_ios/rdbuf (T... args) T imbue cpp/io/basic_ios/imbue (T... args) T bad cpp/io/basic_ios/bad (T... args) T clear cpp/io/basic_ios/clear (T... args) T init cpp/io/basic_ios/init (T... args) std::ifstream::event_callback cpp/io/ios_base/event_callback std::ifstream::failure cpp/io/ios_base/failure T failure cpp/io/ios_base/failure (T... args) T what cpp/error/exception/what (T... args) std::ifstream::sentry cpp/io/basic_istream/sentry T ~sentry cpp/io/basic_istream/sentry (T... args) T operator bool cpp/io/basic_istream/sentry (T... args) T sentry cpp/io/basic_istream/sentry (T... args) std::u32streampos cpp/io/fpos T state cpp/io/fpos/state (T... args) std::length_error cpp/error/length_error T length_error cpp/error/length_error (T... args) T what cpp/error/exception/what (T... args) std::sub_match cpp/regex/sub_match T operator string_type cpp/regex/sub_match/str (T... args) T sub_match cpp/regex/sub_match/sub_match (T... args) T str cpp/regex/sub_match/str (T... args) T length cpp/regex/sub_match/length (T... args) T compare cpp/regex/sub_match/compare (T... args) std::common_type cpp/types/common_type std::shared_timed_mutex cpp/thread/shared_timed_mutex T unlock cpp/thread/shared_timed_mutex/unlock (T... args) T unlock_shared cpp/thread/shared_timed_mutex/unlock_shared (T... args) T try_lock_until cpp/thread/shared_timed_mutex/try_lock_until (T... args) T try_lock_for cpp/thread/shared_timed_mutex/try_lock_for (T... args) T try_lock_shared_until cpp/thread/shared_timed_mutex/try_lock_shared_until (T... args) T shared_timed_mutex cpp/thread/shared_timed_mutex/shared_timed_mutex (T... args) T lock_shared cpp/thread/shared_timed_mutex/lock_shared (T... args) T lock cpp/thread/shared_timed_mutex/lock (T... args) T try_lock cpp/thread/shared_timed_mutex/try_lock (T... args) T try_lock_shared cpp/thread/shared_timed_mutex/try_lock_shared (T... args) T try_lock_shared_for cpp/thread/shared_timed_mutex/try_lock_shared_for (T... args) std::array cpp/container/array T max_size cpp/container/array/max_size (T... args) T rbegin cpp/container/array/rbegin (T... args) T crend cpp/container/array/rend (T... args) T crbegin cpp/container/array/rbegin (T... args) T swap cpp/container/array/swap (T... args) T data cpp/container/array/data (T... args) T back cpp/container/array/back (T... args) T end cpp/container/array/end (T... args) T fill cpp/container/array/fill (T... args) T empty cpp/container/array/empty (T... args) T cend cpp/container/array/end (T... args) T size cpp/container/array/size (T... args) T cbegin cpp/container/array/begin (T... args) T rend cpp/container/array/rend (T... args) T front cpp/container/array/front (T... args) T at cpp/container/array/at (T... args) T operator[] cpp/container/array/operator_at (T... args) T begin cpp/container/array/begin (T... args) std::random_device cpp/numeric/random/random_device T operator() cpp/numeric/random/random_device/operator() (T... args) T random_device cpp/numeric/random/random_device/random_device (T... args) T entropy cpp/numeric/random/random_device/entropy (T... args) T min cpp/numeric/random/random_device/min (T... args) T max cpp/numeric/random/random_device/max (T... args) std::default_random_engine cpp/numeric/random std::raw_storage_iterator cpp/memory/raw_storage_iterator T operator= cpp/memory/raw_storage_iterator/operator= (T... args) T raw_storage_iterator cpp/memory/raw_storage_iterator/raw_storage_iterator (T... args) T operator* cpp/memory/raw_storage_iterator/operator* (T... args) T operator++ cpp/memory/raw_storage_iterator/operator_arith (T... args) std::is_convertible cpp/types/is_convertible std::uint16_t cpp/types/integer std::is_array cpp/types/is_array std::mega cpp/numeric/ratio/ratio std::numpunct cpp/locale/numpunct T grouping cpp/locale/numpunct/grouping (T... args) T do_decimal_point cpp/locale/numpunct/decimal_point (T... args) T thousands_sep cpp/locale/numpunct/thousands_sep (T... args) T numpunct cpp/locale/numpunct/numpunct (T... args) T do_falsename cpp/locale/numpunct/truefalsename (T... args) std::numpunct::string_type T do_grouping cpp/locale/numpunct/grouping (T... args) T truename cpp/locale/numpunct/truefalsename (T... args) std::numpunct::char_type T falsename cpp/locale/numpunct/truefalsename (T... args) T do_truename cpp/locale/numpunct/truefalsename (T... args) T ~numpunct cpp/locale/numpunct/~numpunct (T... args) T decimal_point cpp/locale/numpunct/decimal_point (T... args) T do_thousands_sep cpp/locale/numpunct/thousands_sep (T... args) std::numpunct::string_type cpp/locale/numpunct std::numpunct::char_type cpp/locale/numpunct std::money_put cpp/locale/money_put std::money_put::char_type std::money_put::pattern T do_put cpp/locale/money_put/put (T... args) T money_put cpp/locale/money_put/money_put (T... args) T ~money_put cpp/locale/money_put/~money_put (T... args) T put cpp/locale/money_put/put (T... args) std::money_put::string_type std::money_put::iter_type std::money_put::char_type cpp/locale/money_put std::money_put::pattern cpp/locale/money_base std::money_put::string_type cpp/locale/money_put std::money_put::iter_type cpp/locale/money_put std::new_handler cpp/memory/new/new_handler std::is_member_function_pointer cpp/types/is_member_function_pointer va_list cpp/utility/variadic/va_list argagg-0.4.6/doc/doxygen.cfg.in000066400000000000000000000226451311215245100162650ustar00rootroot00000000000000# Doxyfile 1.6.1 #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- DOXYFILE_ENCODING = UTF-8 PROJECT_NAME = @PROJECT_NAME@ PROJECT_NUMBER = OUTPUT_DIRECTORY = @CMAKE_BINARY_DIR@/share/doc/@PROJECT_NAME@ CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English BRIEF_MEMBER_DESC = YES REPEAT_BRIEF = YES ABBREVIATE_BRIEF = ALWAYS_DETAILED_SEC = NO INLINE_INHERITED_MEMB = NO FULL_PATH_NAMES = YES STRIP_FROM_PATH = STRIP_FROM_INC_PATH = SHORT_NAMES = NO JAVADOC_AUTOBRIEF = NO QT_AUTOBRIEF = NO MULTILINE_CPP_IS_BRIEF = NO INHERIT_DOCS = YES SEPARATE_MEMBER_PAGES = NO TAB_SIZE = 2 ALIASES += "rst=\verbatim embed:rst:leading-asterisk" ALIASES += "endrst=\endverbatim" OPTIMIZE_OUTPUT_FOR_C = NO OPTIMIZE_OUTPUT_JAVA = NO OPTIMIZE_FOR_FORTRAN = NO OPTIMIZE_OUTPUT_VHDL = NO EXTENSION_MAPPING = BUILTIN_STL_SUPPORT = YES CPP_CLI_SUPPORT = NO SIP_SUPPORT = NO IDL_PROPERTY_SUPPORT = YES DISTRIBUTE_GROUP_DOC = NO SUBGROUPING = YES TYPEDEF_HIDES_STRUCT = NO SYMBOL_CACHE_SIZE = 0 MARKDOWN_SUPPORT = YES AUTOLINK_SUPPORT = YES #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- EXTRACT_ALL = YES EXTRACT_PRIVATE = NO EXTRACT_STATIC = YES EXTRACT_LOCAL_CLASSES = NO EXTRACT_LOCAL_METHODS = NO EXTRACT_ANON_NSPACES = NO HIDE_UNDOC_MEMBERS = NO HIDE_UNDOC_CLASSES = NO HIDE_FRIEND_COMPOUNDS = NO HIDE_IN_BODY_DOCS = NO INTERNAL_DOCS = NO CASE_SENSE_NAMES = YES HIDE_SCOPE_NAMES = NO SHOW_INCLUDE_FILES = YES INLINE_INFO = YES SORT_MEMBER_DOCS = YES SORT_BRIEF_DOCS = NO SORT_MEMBERS_CTORS_1ST = NO SORT_GROUP_NAMES = NO SORT_BY_SCOPE_NAME = NO GENERATE_TODOLIST = YES GENERATE_TESTLIST = YES GENERATE_BUGLIST = YES GENERATE_DEPRECATEDLIST= YES ENABLED_SECTIONS = MAX_INITIALIZER_LINES = 30 SHOW_USED_FILES = YES SHOW_DIRECTORIES = NO SHOW_FILES = YES SHOW_NAMESPACES = YES FILE_VERSION_FILTER = LAYOUT_FILE = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- QUIET = NO WARNINGS = YES WARN_IF_UNDOCUMENTED = YES WARN_IF_DOC_ERROR = YES WARN_NO_PARAMDOC = NO WARN_FORMAT = "$file:$line: $text" WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- INPUT = @CMAKE_CURRENT_SOURCE_DIR@/doc @CMAKE_CURRENT_SOURCE_DIR@/include INPUT_ENCODING = UTF-8 FILE_PATTERNS = *.md *.h *.hh *.hpp *.hxx *.i *.ii *.ipp *.ixx *.impl *.c *.cc *.cpp *.cxx RECURSIVE = YES EXCLUDE = EXCLUDE_SYMLINKS = NO EXCLUDE_PATTERNS = gh-pages EXCLUDE_SYMBOLS = EXAMPLE_PATH = EXAMPLE_PATTERNS = EXAMPLE_RECURSIVE = NO IMAGE_PATH = INPUT_FILTER = FILTER_PATTERNS = FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- SOURCE_BROWSER = YES INLINE_SOURCES = NO STRIP_CODE_COMMENTS = YES REFERENCED_BY_RELATION = NO REFERENCES_RELATION = NO REFERENCES_LINK_SOURCE = YES USE_HTAGS = NO VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- ALPHABETICAL_INDEX = NO COLS_IN_ALPHA_INDEX = 5 IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- GENERATE_HTML = YES HTML_OUTPUT = html HTML_FILE_EXTENSION = .html HTML_HEADER = HTML_FOOTER = HTML_TIMESTAMP = NO HTML_STYLESHEET = HTML_ALIGN_MEMBERS = YES HTML_DYNAMIC_SECTIONS = NO GENERATE_DOCSET = NO DOCSET_FEEDNAME = "Doxygen generated docs" DOCSET_BUNDLE_ID = org.doxygen.Project GENERATE_HTMLHELP = NO CHM_FILE = HHC_LOCATION = GENERATE_CHI = NO CHM_INDEX_ENCODING = BINARY_TOC = NO TOC_EXPAND = NO GENERATE_QHP = NO QCH_FILE = QHP_NAMESPACE = QHP_VIRTUAL_FOLDER = doc QHP_CUST_FILTER_NAME = QHP_CUST_FILTER_ATTRS = QHP_SECT_FILTER_ATTRS = QHG_LOCATION = DISABLE_INDEX = NO ENUM_VALUES_PER_LINE = 4 GENERATE_TREEVIEW = NO USE_INLINE_TREES = NO TREEVIEW_WIDTH = 250 FORMULA_FONTSIZE = 10 SEARCHENGINE = YES #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- GENERATE_LATEX = NO LATEX_OUTPUT = latex LATEX_CMD_NAME = latex MAKEINDEX_CMD_NAME = makeindex COMPACT_LATEX = NO PAPER_TYPE = a4wide EXTRA_PACKAGES = LATEX_HEADER = PDF_HYPERLINKS = YES USE_PDFLATEX = YES LATEX_BATCHMODE = NO LATEX_HIDE_INDICES = NO LATEX_SOURCE_CODE = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- GENERATE_RTF = NO RTF_OUTPUT = rtf COMPACT_RTF = NO RTF_HYPERLINKS = NO RTF_STYLESHEET_FILE = RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- GENERATE_MAN = NO MAN_OUTPUT = man MAN_EXTENSION = .3 MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- GENERATE_XML = YES XML_OUTPUT = xml XML_SCHEMA = XML_DTD = XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- GENERATE_PERLMOD = NO PERLMOD_LATEX = NO PERLMOD_PRETTY = YES PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- ENABLE_PREPROCESSING = YES MACRO_EXPANSION = NO EXPAND_ONLY_PREDEF = NO SEARCH_INCLUDES = YES INCLUDE_PATH = INCLUDE_FILE_PATTERNS = PREDEFINED = __unix__ EXPAND_AS_DEFINED = SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- TAGFILES = TAGFILES += "@CMAKE_CURRENT_SOURCE_DIR@/doc/cppreference-doxygen-web.tag.xml=http://en.cppreference.com/w/" GENERATE_TAGFILE = ALLEXTERNALS = NO EXTERNAL_GROUPS = YES PERL_PATH = @PERL_EXE@ #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- CLASS_DIAGRAMS = YES MSCGEN_PATH = HIDE_UNDOC_RELATIONS = YES HAVE_DOT = NO DOT_FONTNAME = FreeSans DOT_FONTSIZE = 10 DOT_FONTPATH = CLASS_GRAPH = YES COLLABORATION_GRAPH = YES GROUP_GRAPHS = YES UML_LOOK = NO TEMPLATE_RELATIONS = NO INCLUDE_GRAPH = YES INCLUDED_BY_GRAPH = YES CALL_GRAPH = YES CALLER_GRAPH = NO GRAPHICAL_HIERARCHY = YES DIRECTORY_GRAPH = YES DOT_IMAGE_FORMAT = png DOT_PATH = DOTFILE_DIRS = DOT_GRAPH_MAX_NODES = 50 MAX_DOT_GRAPH_DEPTH = 0 DOT_TRANSPARENT = NO DOT_MULTI_TARGETS = NO GENERATE_LEGEND = YES DOT_CLEANUP = YES argagg-0.4.6/doc/root.md000066400000000000000000000163441311215245100150260ustar00rootroot00000000000000Argument Aggregator {#mainpage} =================== This is the Doxygen documentation for Argument Aggregator, a simple C++11 argument parser. To use just create an argagg::parser object. However, the struct doesn't provide any explicit methods for defining flags. Instead we define the flags using initialization lists. argagg::parser argparser {{ { "help", {"-h", "--help"}, "shows this help message", 0}, { "delim", {"-d", "--delim"}, "delimiter (default: ,)", 1}, { "num", {"-n", "--num"}, "number", 1}, }}; An option is specified by four things: the name of the option, the strings that activate the option (flags), the option's help message, and the number of arguments the option expects. With the parser defined you actually parse the arguments by calling the argagg::parser::parse() method. If there are any problems then an exception is thrown. argagg::parser_results args; try { args = argparser.parse(argc, argv); } catch (const std::exception& e) { std::cerr << e.what() << std::endl; return EXIT_FAILURE; } You can check if an option shows up in the command line arguments by accessing the option by name from the parser results and using the implicit boolean conversion. You can write out a simplistic option help message by streaming the argagg::parser instance itself. if (args["help"]) { std::cerr << argparser; // -h, --help // shows this help message // -d, --delim // delimiter (default: ,) // -n, --num // number return EXIT_SUCCESS; } That help message is only for the flags. If you want a usage message it's up to you to provide it. if (args["help"]) { std::cerr << "Usage: program [options] ARG1 ARG2" << std::endl << argparser; // Usage: program [options] ARG1 ARG2 // -h, --help // shows this help message // -d, --delim // delimiter (default: ,) // -n, --num // number return EXIT_SUCCESS; } A special output stream, argagg::fmt_ostream, is provided that will run the usage and help through `fmt` for nice word wrapping (see `./examples/joinargs.cpp` for a better example). if (args["help"]) { argagg::fmt_ostream fmt(std::cerr); fmt << "Usage: program [options] ARG1 ARG2" << std::endl << argparser; return EXIT_SUCCESS; } Generally argagg tries to do a minimal amount of work to leave most of the control with the user. If you want to get an option argument but fallback on a default value if it doesn't exist then you can use the argagg::option_results::as() API and provide a default value. auto delim = args["delim"].as(","); If you don't mind being implicit an implicit conversion operator is provided allowing you to write simple assignments. int x = 0; if (args["num"]) { x = args["num"]; } Finally, you can get all of the positional arguments as an std::vector using the argagg::parser_results::pos member. You can alternatively convert individual positional arguments using the same conversion functions as the option argument conversion methods. auto y = 0.0; if (args.pos.size() > 0) { y = args.as(0); } One can also specify `--` on the command line in order to treat all following arguments as not options. For a more detailed treatment take a look at the examples or test cases. Mental Model ------------ The parser just returns a structure of pointers to the C-strings in the original `argv` array. The @ref argagg::parser::parse() method returns a @ref argagg::parser_results object which has two things: position arguments and option results. The position arguments are just a @ref std::vector of `const char*`. The option results are a mapping from option name (@ref std::string) to @ref argagg::option_results objects. The @ref argagg::option_results objects are just an @ref std::vector of @ref argagg::option_result objects. Each instance of an @ref argagg::option_result represents the option showing up on the command line. If there was an argument associated with it then the @ref argagg::option_result::arg member will *not* be `nullptr`. Consider the following command: gcc -g -I/usr/local/include -I. -o test main.o foo.o -L/usr/local/lib -lz bar.o -lpng This would produce a structure like follows, written in psuedo-YAML, where each string is actually a `const char*` pointing to some part of a string in the original `argv` array: parser_results: program: "gcc" pos: ["main.o", "foo.o", "bar.o"] options: version: debug: all: - arg: null include_path: all: - arg: "/usr/local/include" - arg: "." library_path: all: - arg: "/usr/local/lib" library: all: - arg: "z" - arg: "png" output: all: - arg: "test" Conversion to types occurs at the very end when the `as()` API is used. Up to that point `argagg` is just dealing with C-strings. Installation ------------ There is just a single header file (`argagg.hpp`) so you can copy that whereever you want. If you want to properly install it you can use the CMake script. The CMake script exists primarily to build the tests and documentation, but an install target for the header is provided. The standard installation dance using CMake and `make` is as follows: mkdir build cd build cmake -DCMAKE_INSTALL_PREFIX=/usr/local .. make install ctest -V # optionally run tests Override [`CMAKE_INSTALL_PREFIX`](https://cmake.org/cmake/help/v2.8.12/cmake.html#variable:CMAKE_INSTALL_PREFIX) to change the installation location. By default (on UNIX variants) it will install to `/usr/local` resulting in the header being copied to `/usr/local/include/argagg/argagg.hpp`. If you have [Doxygen](http://www.stack.nl/~dimitri/doxygen/) it should build and install documentation as well. There are no dependencies other than the standard library. Edge Cases ---------- There are some interesting edge cases that show up in option parsing. I used the behavior of `gcc` as my target reference in these cases. ### Greedy Arguments Remember that options that require arguments will greedily process arguments. Say we have the following options: `-a`, `-b`, `-c`, and `-o`. They all don't accept arguments except `-o`. Below is a list of permutations for short flag grouping and the results: - `-abco foo`: `-o`'s argument is `foo` - `-aboc foo`: `-o`'s argument is `c`, `foo` is a positional argument - `-aobc foo`: `-o`'s argument is `bc`, `foo` is a positional argument - `-oabc foo`: `-o`'s argument is `abc`, `foo` is a positional argument For whitespace delimited arguments the greedy processing means the next argument element (in `argv`) will be treated as an argument for the previous option, regardless of whether or not it looks like a flag or some other special entry. That means you get behavior like below: - `--output=foo -- --bar`: `--output`'s argument is `foo`, `--bar` is a positional argument - `--output -- --bar`: `--output`'s argument is `--`, `--bar` is treated as a flag - `--output --bar`: `--output`'s argument is `--bar` argagg-0.4.6/examples/000077500000000000000000000000001311215245100145625ustar00rootroot00000000000000argagg-0.4.6/examples/gengetopt_main1.cpp000066400000000000000000000077321311215245100203600ustar00rootroot00000000000000/** * @file * @brief * This example is an adaptation of the example that can be found in the * gengetopt documentation: * https://www.gnu.org/software/gengetopt/gengetopt.html. It does not reach * feature parity because argagg does not implement dependent options, option * sections, word wrapping, and a few other features. */ #include #include #include int main(int argc, char **argv) { using argagg::parser_results; using argagg::parser; using std::cerr; using std::cout; using std::endl; using std::ofstream; using std::ostream; using std::ostringstream; using std::string; parser argparser {{ { "help", {"-h", "--help"}, "Print help and exit", 0}, { "version", {"-V", "--version"}, "Print version and exit", 0}, { "str-opt", {"-s", "--str-opt"}, "A string option, for a filename", 1}, { "my-opt", {"-m", "--my-opt"}, "Another integer option", 1}, { "int-opt", {"-i", "--int-opt"}, "A int option", 1}, { "flag-opt", {"--flag-opt"}, "A flag option (default: off)", 0}, { "funct-opt", {"-F", "--funct-opt"}, "A function option", 0}, { "long-opt", {"--long-opt"}, "A long option", 1}, { "def-opt", {"--def-opt"}, "A string option with default (default: 'Hello')", 1}, { "enum-opt", {"--enum-opt"}, "A string option with list of values (possible values=\"foo\", " "\"bar\", \"hello\", \"bye\"; default=\"hello\")", 1}, { "dependant", {"--dependant"}, "option that depends on str-opt", 1}, }}; cout << "This one is from a C++ program" << endl ; cout << "Try to launch me with some options" << endl ; cout << "(type " << argv[0] << " --help for the complete list)" << endl ; cout << "For example: " << argv[0] << " *.* --funct-opt" << endl ; // Define our usage text. ostringstream usage; usage << argv[0] << " 2.0" << endl << endl << "Usage: " << argv[0] << " [OPTIONS]... [FILES]..." << endl << endl; // Use our argument parser to... parse the command line arguments. If there // are any problems then just spit out the usage and help text and exit. argagg::parser_results args; try { args = argparser.parse(argc, argv); } catch (const std::exception& e) { argagg::fmt_ostream fmt(cerr); fmt << usage.str() << argparser << endl << "Encountered exception while parsing arguments: " << e.what() << endl; return EXIT_FAILURE; } // If the help flag was specified then spit out the usage and help text and // exit. if (args["help"]) { argagg::fmt_ostream fmt(cerr); fmt << usage.str() << argparser; return EXIT_SUCCESS; } if (args["version"]) { cerr << "2.0" << endl; return EXIT_SUCCESS; } if (!args["int-opt"]) { cerr << args.program << ": '--int-opt' ('-i') option required" << endl; return EXIT_FAILURE; } cout << "Here are the options you passed..." << endl; for (const auto& file : args.pos) { cout << "file: " << file << endl; } if (args["funct-opt"]) { cout << "You chose --funct-opt or -F." << endl; } if (args["str-opt"]) { cout << "You inserted " << args["str-opt"].as() << " for " << "--str-opt option." << endl; } if (args["int-opt"]) { cout << "This is the integer you input: " << args["int-opt"].as() << "." << endl; } string flag_opt_arg = "off"; if (args["flag-opt"]) { cout << "The flag option was given!" << endl; flag_opt_arg = "on"; } cout << "The flag is " << flag_opt_arg << "." << endl; if (args["enum-opt"]) { cout << "enum-opt value: " << args["enum-opt"].as() << endl; cout << "enum-opt (original specified) value: " << "hello" << endl; } cout << "def_opt: " << args["def-opt"].as("Hello") << "! "; cout << "Have a nice day! :-)" << endl; return EXIT_SUCCESS; } argagg-0.4.6/examples/joinargs.cpp000066400000000000000000000110431311215245100171010ustar00rootroot00000000000000#include #include #include #include #include static std::ofstream g_dev_null; int main( int argc, const char** argv) { using argagg::parser_results; using argagg::parser; using std::cerr; using std::cout; using std::endl; using std::ofstream; using std::ostream; using std::ostringstream; using std::string; // Use an initializer list to define the argument parser. The first brace // starts the initializer list, the second brace starts the initializer list // for the definitions vector in the argagg::parser struct. parser argparser {{ // Each entry here is an initializer list for an `argagg::definition` // struct. { // Name of the option. This is the key used to retrieve the flag parser // results. "help", // The strings ("flags") that must be matched to activate this option. {"-h", "--help"}, // The help string that is streamed out when the argagg::parser object // itself is streamed out. "displays help information", // Number of arguments needed by this option. Should be 0 or 1. 0}, { "verbose", {"-v", "--verbose"}, "increases verbosity", 0}, { "lorem-ipsum", {"--lorem-ipsum"}, "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do " "eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim " "ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut " "aliquip ex ea commodo consequat. Duis aute irure dolor in " "reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla " "pariatur. Excepteur sint occaecat cupidatat non proident, sunt in " "culpa qui officia deserunt mollit anim id est laborum.", 0}, { "sep", {"-s", "--sep"}, "separator (default ',')", 1}, { "output", {"-o", "--output"}, "output filename (stdout if not specified)", 1}, }}; // Define our usage text. ostringstream usage; usage << "Joins all positional arguments together with a separator" << endl << endl << "Usage: " << argv[0] << " [options] ARG [ARG...]" << endl << endl; // Use our argument parser to... parse the command line arguments. If there // are any problems then just spit out the usage and help text and exit. argagg::parser_results args; try { args = argparser.parse(argc, argv); } catch (const std::exception& e) { argagg::fmt_ostream help(cerr); help << usage.str() << argparser << endl << "Encountered exception while parsing arguments: " << e.what() << endl; return EXIT_FAILURE; } // If the help flag was specified then spit out the usage and help text and // exit. if (args["help"]) { argagg::fmt_ostream help(cerr); help << usage.str() << argparser; return EXIT_SUCCESS; } // Respect verbosity. Okay, the logging here is a little ludicrous. The point // I want to show here is that you can quickly get the number of times an // option shows up. int verbose_level = args["verbose"].count(); // Set up our verbose log output stream selector that selects stderr if the // requested log level is lower than or equal to the currently set verbose // level. g_dev_null.open("/dev/null"); // portable? eh... simple? yes! auto vlog = [&](int level) -> ostream& { return verbose_level >= level ? cerr : g_dev_null; }; vlog(1) << "verbose log level: " << verbose_level << endl; // Use comma as the separator unless one was specified. auto sep = args["sep"].as(","); vlog(1) << "set separator to '" << sep << "'" << endl; // Determine output stream. ofstream output_file; ostream* output = &std::cout; if (args["output"]) { string filename = args["output"]; output_file.open(filename); output = &output_file; vlog(1) << "outputting to file at '" << filename << "'" << endl; } else { vlog(1) << "outputting to stdout" << endl; } // Join the arguments. if (args.count() < 1) { vlog(0) << usage.str() << argparser << endl << "Not enough arguments" << endl; return EXIT_FAILURE; } for (auto& arg : args.pos) { vlog(2) << "writing argument" << endl; vlog(4) << "argument is '" << arg << "'" << endl; *output << arg; if (arg != args.pos.back()) { vlog(3) << "writing separator" << endl; *output << sep; } } vlog(4) << "writing endl" << endl; *output << endl; vlog(4) << "everything a-okay" << endl; return EXIT_SUCCESS; } argagg-0.4.6/include/000077500000000000000000000000001311215245100143675ustar00rootroot00000000000000argagg-0.4.6/include/argagg/000077500000000000000000000000001311215245100156175ustar00rootroot00000000000000argagg-0.4.6/include/argagg/argagg.hpp000066400000000000000000001262761311215245100175760ustar00rootroot00000000000000/* * @file * @brief * Defines a very simple command line argument parser. * * @copyright * Copyright (c) 2017 Viet The Nguyen * * @copyright * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * @copyright * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * @copyright * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #pragma once #ifndef ARGAGG_ARGAGG_ARGAGG_HPP #define ARGAGG_ARGAGG_ARGAGG_HPP #ifdef __unix__ #include #include #endif // #ifdef __unix__ #include #include #include #include #include #include #include #include #include #include #include #include #include /** * @brief * There are only two hard things in Computer Science: cache invalidation and * naming things (Phil Karlton). * * The names of types have to be succint and clear. This has turned out to be a * more difficult thing than I expected. Here you'll find a quick overview of * the type names you'll find in this namespace (and thus "library"). * * When a program is invoked it is passed a number of "command line arguments". * Each of these "arguments" is a string (C-string to be more precise). An * "option" is a command line argument that has special meaning. This library * recognizes a command line argument as a potential option if it starts with a * dash ('-') or double-dash ('--'). * * A "parser" is a set of "definitions" (not a literal std::set but rather a * std::vector). A parser is represented by the argagg::parser struct. * * A "definition" is a structure with four components that define what * "options" are recognized. The four components are the name of the option, * the strings that represent the option, the option's help text, and how many * arguments the option should expect. "Flags" are the individual strings that * represent the option ("-v" and "--verbose" are flags for the "verbose" * option). A definition is represented by the argagg::definition struct. * * Note at this point that the word "option" can be used interchangeably to * mean the notion of an option and the actual instance of an option given a * set of command line arguments. To be unambiguous we use a "definition" to * represent the notion of an option and an "option result" to represent an * actual option parsed from a set of command line arguments. An "option * result" is represented by the argagg::option_result struct. * * There's one more wrinkle to this: an option can show up multiple times in a * given set of command line arguments. For example, "-n 1 -n 2 -n 3". This * will parse into three distinct argagg::option_result instances, but all of * them correspond to the same argagg::definition. We aggregate these into the * argagg::option_results struct which represents "all parser results for a * given option definition". This argagg::option_results is basically a * std::vector of argagg::option_result. * * Options aren't the only thing parsed though. Positional arguments are also * parsed. Thus a parser produces a result that contains both option results * and positional arguments. The parser results are represented by the * argagg::parser_results struct. All option results are stored in a mapping * from option name to the argagg::option_results. All positional arguments are * simply stored in a vector of C-strings. */ namespace argagg { /** * @brief * This exception is thrown when a long option is parsed and is given an * argument using the "=" syntax but the option doesn't expect an argument. */ struct unexpected_argument_error : public std::runtime_error { using std::runtime_error::runtime_error; }; /** * @brief * This exception is thrown when an option is parsed unexpectedly such as when * an argument was expected for a previous option or if an option was found * that has not been defined. */ struct unexpected_option_error : public std::runtime_error { using std::runtime_error::runtime_error; }; /** * @brief * This exception is thrown when an option requires an argument but is not * provided one. This can happen if another flag was found after the option or * if we simply reach the end of the command line arguments. */ struct option_lacks_argument_error : public std::runtime_error { using std::runtime_error::runtime_error; }; /** * @brief * This exception is thrown when an option's flag is invalid. This can be the * case if the flag is not prefixed by one or two hyphens or contains non * alpha-numeric characters after the hypens. See is_valid_flag_definition() * for more details. */ struct invalid_flag : public std::runtime_error { using std::runtime_error::runtime_error; }; /** * @brief * The set of template instantiations that convert C-strings to other types for * the option_result::as(), option_results::as(), parser_results::as(), and * parser_results::all_as() methods are placed in this namespace. */ namespace convert { /** * @brief * Explicit instantiations of this function are used to convert arguments to * types. */ template T arg(const char* arg); } /** * @brief * Represents a single option parse result. * * You can check if this has an argument by using the implicit boolean * conversion. */ struct option_result { /** * @brief * Argument parsed for this single option. If no argument was parsed this * will be set to nullptr. */ const char* arg; /** * @brief * Converts the argument parsed for this single option instance into the * given type using the type matched conversion function * argagg::convert::arg(). If there was not an argument parsed for this * single option instance then a argagg::option_lacks_argument_error * exception is thrown. The specific conversion function may throw other * exceptions. */ template T as() const; /** * @brief * Converts the argument parsed for this single option instance into the * given type using the type matched conversion function * argagg::convert::arg(). If there was not an argument parsed for this * single option instance then the provided default value is returned * instead. If the conversion function throws an exception then it is ignored * and the default value is returned. */ template T as(const T& t) const; /** * @brief * Since we have the argagg::option_result::as() API we might as well alias * it as an implicit conversion operator. This performs implicit conversion * using the argagg::option_result::as() method. * * @note * An implicit boolean conversion specialization exists which returns false * if there is no argument for this single option instance and true * otherwise. This specialization DOES NOT convert the argument to a bool. If * you need to convert the argument to a bool then use the as() API. */ template operator T () const; }; /** * @brief * Represents multiple option parse results for a single option. If treated as * a single parse result it defaults to the last parse result. Note that an * instance of this struct is always created even if no option results are * parsed for a given definition. In that case it will simply be empty. * * To check if the associated option showed up at all simply use the implicit * boolean conversion or check if count() is greater than zero. */ struct option_results { /** * @brief * All option parse results for this option. */ std::vector all; /** * @brief * Gets the number of times the option shows up. */ std::size_t count() const; /** * @brief * Gets a single option parse result by index. */ option_result& operator [] (std::size_t index); /** * @brief * Gets a single option result by index. */ const option_result& operator [] (std::size_t index) const; /** * @brief * Converts the argument parsed for the LAST option parse result for the * parent definition to the provided type. For example, if this was for "-f 1 * -f 2 -f 3" then calling this method for an integer type will return 3. If * there are no option parse results then a std::out_of_range exception is * thrown. Any exceptions thrown by option_result::as() are not * handled. */ template T as() const; /** * @brief * Converts the argument parsed for the LAST option parse result for the * parent definition to the provided type. For example, if this was for "-f 1 * -f 2 -f 3" then calling this method for an integer type will return 3. If * there are no option parse results then the provided default value is * returned instead. */ template T as(const T& t) const; /** * @brief * Since we have the option_results::as() API we might as well alias * it as an implicit conversion operator. This performs implicit conversion * using the option_results::as() method. * * @note * An implicit boolean conversion specialization exists which returns false * if there is no argument for this single option instance and true * otherwise. This specialization DOES NOT convert the argument to a bool. If * you need to convert the argument to a bool then use the as() API. */ template operator T () const; }; /** * @brief * Represents all results of the parser including options and positional * arguments. */ struct parser_results { /** * @brief * Returns the name of the program from the original arguments list. This is * always the first argument. */ const char* program; /** * @brief * Maps from definition name to the structure which contains the parser * results for that definition. */ std::unordered_map options; /** * @brief * Vector of positional arguments. */ std::vector pos; /** * @brief * Used to check if an option was specified at all. */ bool has_option(const std::string& name) const; /** * @brief * Get the parser results for the given definition. If the definition never * showed up then the exception from the unordered_map access will bubble * through so check if the flag exists in the first place with has_option(). */ option_results& operator [] (const std::string& name); /** * @brief * Get the parser results for the given definition. If the definition never * showed up then the exception from the unordered_map access will bubble * through so check if the flag exists in the first place with has_option(). */ const option_results& operator [] (const std::string& name) const; /** * @brief * Gets the number of positional arguments. */ std::size_t count() const; /** * @brief * Gets a positional argument by index. */ const char* operator [] (std::size_t index) const; /** * @brief * Gets a positional argument converted to the given type. */ template T as(std::size_t i = 0) const; /** * @brief * Gets all positional arguments converted to the given type. */ template std::vector all_as() const; }; /** * @brief * An option definition which essentially represents what an option is. */ struct definition { /** * @brief * Name of the option. Option parser results are keyed by this name. */ const std::string name; /** * @brief * List of strings to match that correspond to this option. Should be fully * specified with hyphens (e.g. "-v" or "--verbose"). */ std::vector flags; /** * @brief * Help string for this option. */ std::string help; /** * @brief * Number of arguments this option requires. Must be 0 or 1. All other values * have undefined behavior. Okay, the code actually works with positive * values in general, but it's unorthodox command line behavior. */ unsigned int num_args; /** * @brief * Returns true if this option does not want any arguments. */ bool wants_no_arguments() const; /** * @brief * Returns true if this option requires arguments. */ bool requires_arguments() const; }; /** * @brief * Checks whether or not a command line argument should be processed as an * option flag. This is very similar to is_valid_flag_definition() but must * allow for short flag groups (e.g. "-abc") and equal-assigned long flag * arguments (e.g. "--output=foo.txt"). */ bool cmd_line_arg_is_option_flag( const char* s); /** * @brief * Checks whether a flag in an option definition is valid. I suggest reading * through the function source to understand what dictates a valid. */ bool is_valid_flag_definition( const char* s); /** * @brief * Tests whether or not a valid flag is short. Assumes the provided cstring is * already a valid flag. */ bool flag_is_short( const char* s); /** * @brief * Contains two maps which aid in option parsing. The first map, @ref * short_map, maps from a short flag (just a character) to a pointer to the * original @ref definition that the flag represents. The second map, @ref * long_map, maps from a long flag (an std::string) to a pointer to the * original @ref definition that the flag represents. * * This object is usually a temporary that only exists during the parsing * operation. It is typically constructed using @ref validate_definitions(). */ struct parser_map { /** * @brief * Maps from a short flag (just a character) to a pointer to the original * @ref definition that the flag represents. */ std::array short_map; /** * @brief * Maps from a long flag (an std::string) to a pointer to the original @ref * definition that the flag represents. */ std::unordered_map long_map; /** * @brief * Returns true if the provided short flag exists in the map object. */ bool known_short_flag( const char flag) const; /** * @brief * If the short flag exists in the map object then it is returned by this * method. If it doesn't then nullptr will be returned. */ const definition* get_definition_for_short_flag( const char flag) const; /** * @brief * Returns true if the provided long flag exists in the map object. */ bool known_long_flag( const std::string& flag) const; /** * @brief * If the long flag exists in the map object then it is returned by this * method. If it doesn't then nullptr will be returned. */ const definition* get_definition_for_long_flag( const std::string& flag) const; }; /** * @brief * Validates a collection (specifically an std::vector) of @ref definition * objects by checking if the contained flags are valid. If the set of @ref * definition objects is not valid then an exception is thrown. Upon successful * validation a @ref parser_map object is returned. */ parser_map validate_definitions( const std::vector& definitions); /** * @brief * A list of option definitions used to inform how to parse arguments. */ struct parser { /** * @brief * Vector of the option definitions which inform this parser how to parse * the command line arguments. */ std::vector definitions; /** * @brief * Parses the provided command line arguments and returns the results as * @ref parser_results. * * @note * This method is not thread-safe and assumes that no modifications are made * to the definitions member field during the extent of this method call. */ parser_results parse(int argc, const char** argv) const; /** * @brief * Through strict interpretation of pointer casting rules, despite this being * a safe operation, C++ doesn't allow implicit casts from char** to * const char** so here's an overload that performs a const_cast, * which is typically frowned upon but is safe here. */ parser_results parse(int argc, char** argv) const; }; /** * @brief * A convenience output stream that will accumulate what is streamed to it and * then, on destruction, format the accumulated string using the fmt program * (via the argagg::fmt_string() function) to the provided std::ostream. * * Example use: * * @code * { * argagg::fmt_ostream f(std::cerr); * f << "Usage: " << really_long_string << std::endl; * } // on destruction here the formatted string will be streamed to std::cerr * @endcode * * @note * This only has formatting behavior if the __unix__ preprocessor * definition is defined since formatting relies on the POSIX API for forking, * executing a process, and reading/writing to/from file descriptors. If that * preprocessor definition is not defined then this class has the same overall * behavior except the output string is not formatted (basically streams * whatever the accumulated string is). See arggg::fmt_string(). */ struct fmt_ostream : public std::ostringstream { /** * @brief * Reference to the final output stream that the formatted string will be * streamed to. */ std::ostream& output; /** * @brief * Construct to output to the provided output stream when this object is * destroyed. */ fmt_ostream(std::ostream& output); /** * @brief * Special destructor that will format the accumulated string using fmt (via * the argagg::fmt_string() function) and stream it to the std::ostream * stored. */ ~fmt_ostream(); }; /** * @brief * Processes the provided string using the fmt util and returns the resulting * output as a string. Not the most efficient (in time or space) but gets the * job done. * * This function is cowardly so if there are any errors encountered such as a * syscall returning -1 then the input string is returned. * * @note * This only has formatting behavior if the __unix__ preprocessor * definition is defined since it relies on the POSIX API for forking, * executing a process, reading/writing to/from file descriptors, and the * existence of the fmt util. */ std::string fmt_string(const std::string& s); } // namespace argagg /** * @brief * Writes the option help to the given stream. */ std::ostream& operator << (std::ostream& os, const argagg::parser& x); // ---- end of declarations, header-only implementations follow ---- namespace argagg { template T option_result::as() const { if (this->arg) { return convert::arg(this->arg); } else { throw option_lacks_argument_error("option has no argument"); } } template T option_result::as(const T& t) const { if (this->arg) { try { return convert::arg(this->arg); } catch (...) { return t; } } else { // I actually think this will never happen. To call this method you have // to access a specific option_result for an option. If there's a // specific option_result then the option was found. If the option // requires an argument then it will definitely have an argument // otherwise the parser would have complained. return t; } } template option_result::operator T () const { return this->as(); } template <> inline option_result::operator bool () const { return this->arg != nullptr; } inline std::size_t option_results::count() const { return this->all.size(); } inline option_result& option_results::operator [] (std::size_t index) { return this->all[index]; } inline const option_result& option_results::operator [] (std::size_t index) const { return this->all[index]; } template T option_results::as() const { if (this->all.size() == 0) { throw std::out_of_range("no option arguments to convert"); } return this->all.back().as(); } template T option_results::as(const T& t) const { if (this->all.size() == 0) { return t; } return this->all.back().as(t); } template option_results::operator T () const { return this->as(); } template <> inline option_results::operator bool () const { return this->all.size() > 0; } inline bool parser_results::has_option(const std::string& name) const { const auto it = this->options.find(name); return ( it != this->options.end()) && it->second.all.size() > 0; } inline option_results& parser_results::operator [] (const std::string& name) { return this->options.at(name); } inline const option_results& parser_results::operator [] (const std::string& name) const { return this->options.at(name); } inline std::size_t parser_results::count() const { return this->pos.size(); } inline const char* parser_results::operator [] (std::size_t index) const { return this->pos[index]; } template T parser_results::as(std::size_t i) const { return convert::arg(this->pos[i]); } template std::vector parser_results::all_as() const { std::vector v(this->pos.size()); std::transform( this->pos.begin(), this->pos.end(), v.begin(), [](const char* arg) { return convert::arg(arg); }); return v; } inline bool definition::wants_no_arguments() const { return this->num_args == 0; } inline bool definition::requires_arguments() const { return this->num_args > 0; } inline bool cmd_line_arg_is_option_flag( const char* s) { auto len = std::strlen(s); // The shortest possible flag has two characters: a hyphen and an // alpha-numeric character. if (len < 2) { return false; } // All flags must start with a hyphen. if (s[0] != '-') { return false; } // Shift the name forward by a character to account for the initial hyphen. // This means if s was originally "-v" then name will be "v". const char* name = s + 1; // Check if we're dealing with a long flag. bool is_long = false; if (s[1] == '-') { is_long = true; // Just -- is not a valid flag. if (len == 2) { return false; } // Shift the name forward to account for the extra hyphen. This means if s // was originally "--output" then name will be "output". name = s + 2; } // The first character of the flag name must be alpha-numeric. This is to // prevent things like "---a" from being valid flags. len = std::strlen(name); if (!std::isalnum(name[0])) { return false; } // At this point in is_valid_flag_definition() we would check if the short // flag has only one character. At command line specification you can group // short flags together or even add an argument to a short flag without a // space delimiter. Thus we don't check if this has only one character // because it might not. // If this is a long flag then we expect all characters *up to* an equal sign // to be alpha-numeric or a hyphen. After the equal sign you are specify the // argument to a long flag which can be basically anything. if (is_long) { bool encountered_equal = false; return std::all_of(name, name + len, [&](const char& c) { if (encountered_equal) { return true; } else { if (c == '=') { encountered_equal = true; return true; } return std::isalnum(c) || c == '-'; } }); } // At this point we are not dealing with a long flag. We already checked that // the first character is alpha-numeric so we've got the case of a single // short flag covered. This might be a short flag group though and we might // be tempted to check that each character of the short flag group is // alpha-numeric. However, you can specify the argument for a short flag // without a space delimiter (e.g. "-I/usr/local/include") so you can't tell // if the rest of a short flag group is part of the argument or not unless // you know what is a defined flag or not. We leave that kind of processing // to the parser. return true; } inline bool is_valid_flag_definition( const char* s) { auto len = std::strlen(s); // The shortest possible flag has two characters: a hyphen and an // alpha-numeric character. if (len < 2) { return false; } // All flags must start with a hyphen. if (s[0] != '-') { return false; } // Shift the name forward by a character to account for the initial hyphen. // This means if s was originally "-v" then name will be "v". const char* name = s + 1; // Check if we're dealing with a long flag. bool is_long = false; if (s[1] == '-') { is_long = true; // Just -- is not a valid flag. if (len == 2) { return false; } // Shift the name forward to account for the extra hyphen. This means if s // was originally "--output" then name will be "output". name = s + 2; } // The first character of the flag name must be alpha-numeric. This is to // prevent things like "---a" from being valid flags. len = std::strlen(name); if (!std::isalnum(name[0])) { return false; } // If this is a short flag then it must only have one character. if (!is_long && len > 1) { return false; } // The rest of the characters must be alpha-numeric, but long flags are // allowed to have hyphens too. return std::all_of(name + 1, name + len, [&](const char& c) { return std::isalnum(c) || (c == '-' && is_long); }); } inline bool flag_is_short( const char* s) { return s[0] == '-' && std::isalnum(s[1]); } inline bool parser_map::known_short_flag( const char flag) const { return this->short_map[flag] != nullptr; } inline const definition* parser_map::get_definition_for_short_flag( const char flag) const { return this->short_map[flag]; } inline bool parser_map::known_long_flag( const std::string& flag) const { const auto existing_long_flag = this->long_map.find(flag); return existing_long_flag != long_map.end(); } inline const definition* parser_map::get_definition_for_long_flag( const std::string& flag) const { const auto existing_long_flag = this->long_map.find(flag); if (existing_long_flag == long_map.end()) { return nullptr; } return existing_long_flag->second; } inline parser_map validate_definitions( const std::vector& definitions) { std::unordered_map long_map; parser_map map {{{nullptr}}, std::move(long_map)}; for (auto& defn : definitions) { if (defn.flags.size() == 0) { std::ostringstream msg; msg << "option \"" << defn.name << "\" has no flag definitions"; throw invalid_flag(msg.str()); } for (auto& flag : defn.flags) { if (!is_valid_flag_definition(flag.data())) { std::ostringstream msg; msg << "flag \"" << flag << "\" specified for option \"" << defn.name << "\" is invalid"; throw invalid_flag(msg.str()); } if (flag_is_short(flag.data())) { const int short_flag_letter = flag[1]; const auto existing_short_flag = map.short_map[short_flag_letter]; bool short_flag_already_exists = (existing_short_flag != nullptr); if (short_flag_already_exists) { std::ostringstream msg; msg << "duplicate short flag \"" << flag << "\" found, specified by both option \"" << defn.name << "\" and option \"" << existing_short_flag->name; throw invalid_flag(msg.str()); } map.short_map[short_flag_letter] = &defn; continue; } // If we're here then this is a valid, long-style flag. if (map.known_long_flag(flag)) { const auto existing_long_flag = map.get_definition_for_long_flag(flag); std::ostringstream msg; msg << "duplicate long flag \"" << flag << "\" found, specified by both option \"" << defn.name << "\" and option \"" << existing_long_flag->name; throw invalid_flag(msg.str()); } map.long_map.insert(std::make_pair(flag, &defn)); } } return map; } inline parser_results parser::parse(int argc, const char** argv) const { // Inspect each definition to see if its valid. You may wonder "why don't // you do this validation on construction?" I had thought about it but // realized that since I've made the parser an aggregate type (granted it // just "aggregates" a single vector) I would need to track any changes to // the definitions vector and re-run the validity check in order to // maintain this expected "validity invariant" on the object. That would // then require hiding the definitions vector as a private entry and then // turning the parser into a thin interface (by re-exposing setters and // getters) to the vector methods just so that I can catch when the // definition has been modified. It seems much simpler to just enforce the // validity when you actually want to parser because it's at the moment of // parsing that you know the definitions are complete. parser_map map = validate_definitions(this->definitions); // Initialize the parser results that we'll be returning. Store the program // name (assumed to be the first command line argument) and initialize // everything else as empty. std::unordered_map options {}; std::vector pos; parser_results results {argv[0], std::move(options), std::move(pos)}; // Add an empty option result for each definition. for (const auto& defn : this->definitions) { option_results opt_results {{}}; results.options.insert( std::make_pair(defn.name, opt_results)); } // Don't start off ignoring flags. We only ignore flags after a -- shows up // in the command line arguments. bool ignore_flags = false; // Keep track of any options that are expecting arguments. const char* last_flag_expecting_args = nullptr; option_result* last_option_expecting_args = nullptr; unsigned int num_option_args_to_consume = 0; // Get pointers to pointers so we can treat the raw pointer array as an // iterator for standard library algorithms. This isn't used yet but can be // used to template this function to work on iterators over strings or // C-strings. const char** arg_i = argv + 1; const char** arg_end = argv + argc; while (arg_i != arg_end) { auto arg_i_cstr = *arg_i; auto arg_i_len = std::strlen(arg_i_cstr); // Some behavior to note: if the previous option is expecting an argument // then the next entry will be treated as a positional argument even if // it looks like a flag. bool treat_as_positional_argument = ( ignore_flags || num_option_args_to_consume > 0 || !cmd_line_arg_is_option_flag(arg_i_cstr) ); if (treat_as_positional_argument) { // If last option is expecting some specific positive number of // arguments then give this argument to that option, *regardless of // whether or not the argument looks like a flag or is the special "--" // argument*. if (num_option_args_to_consume > 0) { last_option_expecting_args->arg = arg_i_cstr; --num_option_args_to_consume; ++arg_i; continue; } // Now we check if this is just "--" which is a special argument that // causes all following arguments to be treated as non-options and is // itselve discarded. if (std::strncmp(arg_i_cstr, "--", 2) == 0 && arg_i_len == 2) { ignore_flags = true; ++arg_i; continue; } // If there are no expectations for option arguments then simply use // this argument as a positional argument. results.pos.push_back(arg_i_cstr); ++arg_i; continue; } // Reset the "expecting argument" state. last_flag_expecting_args = nullptr; last_option_expecting_args = nullptr; num_option_args_to_consume = 0; // If we're at this point then we're definitely dealing with something // that is flag-like and has hyphen as the first character and has a // length of at least two characters. How we handle this potential flag // depends on whether or not it is a long-option so we check that first. bool is_long_flag = (arg_i_cstr[1] == '-'); if (is_long_flag) { // Long flags have a complication: their arguments can be specified // using an '=' character right inside the argument. That means an // argument like "--output=foobar.txt" is actually an option with flag // "--output" and argument "foobar.txt". So we look for the first // instance of the '=' character and keep it in long_flag_arg. If // long_flag_arg is nullptr then we didn't find '='. We need the // flag_len to construct long_flag_str below. auto long_flag_arg = std::strchr(arg_i_cstr, '='); std::size_t flag_len = arg_i_len; if (long_flag_arg != nullptr) { flag_len = long_flag_arg - arg_i_cstr; } std::string long_flag_str(arg_i_cstr, flag_len); if (!map.known_long_flag(long_flag_str)) { std::ostringstream msg; msg << "found unexpected flag: " << long_flag_str; throw unexpected_option_error(msg.str()); } const auto defn = map.get_definition_for_long_flag(long_flag_str); if (long_flag_arg != nullptr && defn->num_args == 0) { std::ostringstream msg; msg << "found argument for option not expecting an argument: " << arg_i_cstr; throw unexpected_argument_error(msg.str()); } // We've got a legitimate, known long flag option so we add an option // result. This option result initially has an arg of nullptr, but that // might change in the following block. auto& opt_results = results.options[defn->name]; option_result opt_result {nullptr}; opt_results.all.push_back(std::move(opt_result)); if (defn->requires_arguments()) { bool there_is_an_equal_delimited_arg = (long_flag_arg != nullptr); if (there_is_an_equal_delimited_arg) { // long_flag_arg would be "=foo" in the "--output=foo" case so we // increment by 1 to get rid of the equal sign. opt_results.all.back().arg = long_flag_arg + 1; } else { last_flag_expecting_args = arg_i_cstr; last_option_expecting_args = &(opt_results.all.back()); num_option_args_to_consume = defn->num_args; } } ++arg_i; continue; } // If we've made it here then we're looking at either a short flag or a // group of short flags. Short flags can be grouped together so long as // they don't require any arguments unless the option that does is the // last in the group ("-o x -v" is okay, "-vo x" is okay, "-ov x" is // not). So starting after the dash we're going to process each character // as if it were a separate flag. Note "sf_idx" stands for "short flag // index". for (std::size_t sf_idx = 1; sf_idx < arg_i_len; ++sf_idx) { const auto short_flag = arg_i_cstr[sf_idx]; if (!std::isalnum(short_flag)) { std::ostringstream msg; msg << "found non-alphanumeric character '" << arg_i_cstr[sf_idx] << "' in flag group '" << arg_i_cstr << "'"; throw std::domain_error(msg.str()); } if (!map.known_short_flag(short_flag)) { std::ostringstream msg; msg << "found unexpected flag '" << arg_i_cstr[sf_idx] << "' in flag group '" << arg_i_cstr << "'"; throw unexpected_option_error(msg.str()); } auto defn = map.get_definition_for_short_flag(short_flag); auto& opt_results = results.options[defn->name]; // Create an option result with an empty argument (for now) and add it // to this option's results. option_result opt_result {nullptr}; opt_results.all.push_back(std::move(opt_result)); if (defn->requires_arguments()) { // If this short flag's option requires an argument and we're the // last flag in the short flag group then just put the parser into // "expecting argument for last option" state and move onto the next // command line argument. bool is_last_short_flag_in_group = (sf_idx == arg_i_len - 1); if (is_last_short_flag_in_group) { last_flag_expecting_args = arg_i_cstr; last_option_expecting_args = &(opt_results.all.back()); num_option_args_to_consume = defn->num_args; break; } // If this short flag's option requires an argument and we're NOT the // last flag in the short flag group then we automatically consume // the rest of the short flag group as the argument for this flag. // This is how we get the POSIX behavior of being able to specify a // flag's arguments without a white space delimiter (e.g. // "-I/usr/local/include"). opt_results.all.back().arg = arg_i_cstr + sf_idx + 1; break; } } ++arg_i; continue; } // If we're done with all of the arguments but are still expecting // arguments for a previous option then we haven't satisfied that option. // This is an error. if (num_option_args_to_consume > 0) { std::ostringstream msg; msg << "last option \"" << last_flag_expecting_args << "\" expects an argument but the parser ran out of command line " << "arguments to parse"; throw option_lacks_argument_error(msg.str()); } return results; } inline parser_results parser::parse(int argc, char** argv) const { return parse(argc, const_cast(argv)); } namespace convert { /** * @brief * Templated function for conversion to T using the @ref std::strtol() * function. This is used for anything long length or shorter (long, int, * short, char). */ template inline T long_(const char* arg) { char* endptr = nullptr; errno = 0; T ret = static_cast(std::strtol(arg, &endptr, 0)); if (endptr == arg) { std::ostringstream msg; msg << "unable to convert argument to integer: \"" << arg << "\""; throw std::invalid_argument(msg.str()); } if (errno == ERANGE) { throw std::out_of_range("argument numeric value out of range"); } return ret; } /** * @brief * Templated function for conversion to T using the @ref std::strtoll() * function. This is used for anything long long length or shorter (long * long). */ template inline T long_long_(const char* arg) { char* endptr = nullptr; errno = 0; T ret = static_cast(std::strtoll(arg, &endptr, 0)); if (endptr == arg) { std::ostringstream msg; msg << "unable to convert argument to integer: \"" << arg << "\""; throw std::invalid_argument(msg.str()); } if (errno == ERANGE) { throw std::out_of_range("argument numeric value out of range"); } return ret; } #define DEFINE_CONVERSION_FROM_LONG_(TYPE) \ template <> inline \ TYPE arg(const char* arg) \ { \ return long_(arg); \ } DEFINE_CONVERSION_FROM_LONG_(char) DEFINE_CONVERSION_FROM_LONG_(unsigned char) DEFINE_CONVERSION_FROM_LONG_(signed char) DEFINE_CONVERSION_FROM_LONG_(short) DEFINE_CONVERSION_FROM_LONG_(unsigned short) DEFINE_CONVERSION_FROM_LONG_(int) DEFINE_CONVERSION_FROM_LONG_(unsigned int) DEFINE_CONVERSION_FROM_LONG_(long) DEFINE_CONVERSION_FROM_LONG_(unsigned long) #undef DEFINE_CONVERSION_FROM_LONG_ #define DEFINE_CONVERSION_FROM_LONG_LONG_(TYPE) \ template <> inline \ TYPE arg(const char* arg) \ { \ return long_long_(arg); \ } DEFINE_CONVERSION_FROM_LONG_LONG_(long long) DEFINE_CONVERSION_FROM_LONG_LONG_(unsigned long long) #undef DEFINE_CONVERSION_FROM_LONG_LONG_ template <> inline bool arg(const char* arg) { return argagg::convert::arg(arg) != 0; } template <> inline float arg(const char* arg) { char* endptr = nullptr; errno = 0; float ret = std::strtof(arg, &endptr); if (endptr == arg) { std::ostringstream msg; msg << "unable to convert argument to integer: \"" << arg << "\""; throw std::invalid_argument(msg.str()); } if (errno == ERANGE) { throw std::out_of_range("argument numeric value out of range"); } return ret; } template <> inline double arg(const char* arg) { char* endptr = nullptr; errno = 0; double ret = std::strtod(arg, &endptr); if (endptr == arg) { std::ostringstream msg; msg << "unable to convert argument to integer: \"" << arg << "\""; throw std::invalid_argument(msg.str()); } if (errno == ERANGE) { throw std::out_of_range("argument numeric value out of range"); } return ret; } template <> inline const char* arg(const char* arg) { return arg; } template <> inline std::string arg(const char* arg) { return std::string(arg); } } inline fmt_ostream::fmt_ostream(std::ostream& output) : std::ostringstream(), output(output) { } inline fmt_ostream::~fmt_ostream() { output << fmt_string(this->str()); } #ifdef __unix__ inline std::string fmt_string(const std::string& s) { constexpr int read_end = 0; constexpr int write_end = 1; // TODO (vnguyen): This function overall needs to handle possible error // returns from the various syscalls. int read_pipe[2]; int write_pipe[2]; if (pipe(read_pipe) == -1) { return s; } if (pipe(write_pipe) == -1) { return s; } auto parent_pid = fork(); bool is_fmt_proc = (parent_pid == 0); if (is_fmt_proc) { dup2(write_pipe[read_end], STDIN_FILENO); dup2(read_pipe[write_end], STDOUT_FILENO); close(write_pipe[read_end]); close(write_pipe[write_end]); close(read_pipe[read_end]); close(read_pipe[write_end]); const char* argv[] = {"fmt", NULL}; execvp(const_cast(argv[0]), const_cast(argv)); } close(write_pipe[read_end]); close(read_pipe[write_end]); auto fmt_write_fd = write_pipe[write_end]; auto write_result = write(fmt_write_fd, s.c_str(), s.length()); if (write_result != static_cast(s.length())) { return s; } close(fmt_write_fd); auto fmt_read_fd = read_pipe[read_end]; std::ostringstream os; char buf[64]; while (true) { auto read_count = read( fmt_read_fd, reinterpret_cast(buf), sizeof(buf)); if (read_count <= 0) { break; } os.write(buf, static_cast(read_count)); } close(fmt_read_fd); return os.str(); } #else // #ifdef __unix__ inline std::string fmt_string(const std::string& s) { return s; } #endif // #ifdef __unix__ } // namespace argagg inline std::ostream& operator << (std::ostream& os, const argagg::parser& x) { for (auto& definition : x.definitions) { os << " "; for (auto& flag : definition.flags) { os << flag; if (flag != definition.flags.back()) { os << ", "; } } os << std::endl; os << " " << definition.help << std::endl; } return os; } #endif // ARGAGG_ARGAGG_ARGAGG_HPP argagg-0.4.6/packaging/000077500000000000000000000000001311215245100146705ustar00rootroot00000000000000argagg-0.4.6/packaging/rpm/000077500000000000000000000000001311215245100154665ustar00rootroot00000000000000argagg-0.4.6/packaging/rpm/argagg.spec000066400000000000000000000056121311215245100175760ustar00rootroot00000000000000%global debug_package %{nil} Name: argagg Version: 0.4.6 Release: 1%{?dist} Summary: Simple C++ command line argument/option parser License: MIT URL: https://github.com/vietjtnguyen/argagg/ Source0: https://github.com/vietjtnguyen/argagg/archive/%{version}.tar.gz#/%{name}-%{version}.tar.gz BuildRequires: cmake BuildRequires: doxygen %description This is yet another C++ command line argument/option parser. It was written as a simple and idiomatic alternative to other frameworks like getopt, Boost program options, TCLAP, and others. The goal is to achieve the majority of argument parsing needs in a simple manner with an easy to use API. It operates as a single pass over all arguments, recognizing flags prefixed by - (short) or -- (long) and aggregating them into easy to access structures with lots of convenience functions. It defers processing types until you access them, so the result structures end up just being pointers into the original command line argument C-strings. argagg supports POSIX recommended argument syntax conventions. %package devel Summary: Development files for %{name} %description devel The %{name}-devel package contains the header files for developing applications that use %{name}. %package doc Summary: Developer documentation for %{name} %description doc The %{name}-doc package contains the documentation for developing applications that use %{name}. %prep %setup -q %build %cmake make %{?_smp_mflags} %install %make_install %check ctest -V %{?_smp_mflags} %files %files devel %{_includedir}/* %files doc %doc %{_datadir}/doc/%{name} %changelog * Fri May 26 2017 Viet The Nguyen - Updated version to 0.4.6 * Fri Apr 28 2017 Viet The Nguyen - Updated version to 0.4.5 * Wed Apr 25 2017 Viet The Nguyen - Updated version to 0.4.4 * Tue Apr 25 2017 Viet The Nguyen - Updated version to 0.4.3 * Tue Apr 25 2017 Viet The Nguyen - Updated version to 0.4.2 * Sun Mar 05 2017 Viet The Nguyen - Updated description - Remove dependence on empty root package * Sun Feb 19 2017 Viet The Nguyen - Disabled creation of debuginfo package * Mon Feb 13 2017 Viet The Nguyen - Fixed License field and doc subpackage description typo * Sat Feb 11 2017 Viet The Nguyen - Updated version to 0.2.2 * Fri Feb 10 2017 Viet The Nguyen - Separated documentation into a separate package * Fri Feb 10 2017 Viet The Nguyen - Packaged version 0.2.1 * Mon Jan 30 2017 Viet The Nguyen - Added missing files specification for empty parent package * Sun Jan 29 2017 Viet The Nguyen - Initial packaging argagg-0.4.6/test/000077500000000000000000000000001311215245100137235ustar00rootroot00000000000000argagg-0.4.6/test/doctest.h000066400000000000000000004520061311215245100155500ustar00rootroot00000000000000// ====================================================================== // == DO NOT MODIFY THIS FILE BY HAND - IT IS AUTO GENERATED BY CMAKE! == // ====================================================================== // // doctest.h - the lightest feature-rich C++ single-header testing framework for unit tests and TDD // // Copyright (c) 2016 Viktor Kirilov // // Distributed under the MIT Software License // See accompanying file LICENSE.txt or copy at // https://opensource.org/licenses/MIT // // The documentation can be found at the library's page: // https://github.com/onqtam/doctest/blob/master/doc/markdown/readme.md // // ================================================================================================= // ================================================================================================= // ================================================================================================= // // The library is heavily influenced by Catch - https://github.com/philsquared/Catch // which uses the Boost Software License - Version 1.0 // see here - https://github.com/philsquared/Catch/blob/master/LICENSE_1_0.txt // // The concept of subcases (sections in Catch) and expression decomposition are from there. // Some parts of the code are taken directly: // - stringification - the detection of "ostream& operator<<(ostream&, const T&)" and StringMaker<> // - the Approx() helper class for floating point comparison // - colors in the console // - breaking into a debugger // // The expression decomposing templates are taken from lest - https://github.com/martinmoene/lest // which uses the Boost Software License - Version 1.0 // see here - https://github.com/martinmoene/lest/blob/master/LICENSE_1_0.txt // // ================================================================================================= // ================================================================================================= // ================================================================================================= // Suppress this globally (without push/pop) - there is no way to silence it in the // expression decomposition macros _Pragma() in macros doesn't work for the c++ front-end of g++ // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=55578 // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69543 // Also the warning is completely worthless nowadays - http://stackoverflow.com/questions/14016993 #if defined(__GNUC__) && !defined(__clang__) #pragma GCC diagnostic ignored "-Waggregate-return" #endif #if defined(__clang__) #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wunknown-pragmas" #pragma clang diagnostic ignored "-Wpadded" #pragma clang diagnostic ignored "-Wmissing-prototypes" #pragma clang diagnostic ignored "-Wshorten-64-to-32" #pragma clang diagnostic ignored "-Wunused-local-typedef" #endif // __clang__ #if defined(__GNUC__) && !defined(__clang__) #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 6) #pragma GCC diagnostic push #endif // > gcc 4.6 #pragma GCC diagnostic ignored "-Wunknown-pragmas" #pragma GCC diagnostic ignored "-Weffc++" #pragma GCC diagnostic ignored "-Wstrict-overflow" #pragma GCC diagnostic ignored "-Wmissing-declarations" #pragma GCC diagnostic ignored "-Winline" #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 6) #pragma GCC diagnostic ignored "-Wzero-as-null-pointer-constant" #endif // > gcc 4.6 #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 7) #pragma GCC diagnostic ignored "-Wunused-local-typedefs" #endif // > gcc 4.7 #if __GNUC__ > 5 || (__GNUC__ == 5 && __GNUC_MINOR__ > 3) #pragma GCC diagnostic ignored "-Wuseless-cast" #endif // > gcc 5.3 #endif // __GNUC__ #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable : 4996) // The compiler encountered a deprecated declaration #pragma warning(disable : 4706) // assignment within conditional expression #pragma warning(disable : 4512) // 'class' : assignment operator could not be generated #pragma warning(disable : 4127) // conditional expression is constant #endif // _MSC_VER #ifndef DOCTEST_LIBRARY_INCLUDED #define DOCTEST_LIBRARY_INCLUDED #define DOCTEST_VERSION_MAJOR 1 #define DOCTEST_VERSION_MINOR 1 #define DOCTEST_VERSION_PATCH 3 #define DOCTEST_VERSION_STR "1.1.3" #define DOCTEST_VERSION \ (DOCTEST_VERSION_MAJOR * 10000 + DOCTEST_VERSION_MINOR * 100 + DOCTEST_VERSION_PATCH) // ================================================================================================= // == MODERN C++ FEATURE DETECTION ================================================================= // ================================================================================================= #if __cplusplus >= 201103L #ifndef DOCTEST_CONFIG_WITH_NULLPTR #define DOCTEST_CONFIG_WITH_NULLPTR #endif // DOCTEST_CONFIG_WITH_NULLPTR #ifndef DOCTEST_CONFIG_WITH_LONG_LONG #define DOCTEST_CONFIG_WITH_LONG_LONG #endif // DOCTEST_CONFIG_WITH_LONG_LONG #ifndef DOCTEST_CONFIG_WITH_STATIC_ASSERT #define DOCTEST_CONFIG_WITH_STATIC_ASSERT #endif // DOCTEST_CONFIG_WITH_STATIC_ASSERT #endif // __cplusplus >= 201103L // nullptr #ifndef DOCTEST_CONFIG_WITH_NULLPTR #ifdef __clang__ #if __has_feature(cxx_nullptr) #define DOCTEST_CONFIG_WITH_NULLPTR #endif // __has_feature(cxx_nullptr) #endif // __clang__ #if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ >= 6 && defined(__GXX_EXPERIMENTAL_CXX0X__) #define DOCTEST_CONFIG_WITH_NULLPTR #endif // __GNUC__ #if defined(_MSC_VER) && (_MSC_VER >= 1600) // MSVC 2010 #define DOCTEST_CONFIG_WITH_NULLPTR #endif // _MSC_VER #endif // DOCTEST_CONFIG_WITH_NULLPTR #if defined(DOCTEST_CONFIG_NO_NULLPTR) && defined(DOCTEST_CONFIG_WITH_NULLPTR) #undef DOCTEST_CONFIG_WITH_NULLPTR #endif // DOCTEST_CONFIG_NO_NULLPTR // long long #ifndef DOCTEST_CONFIG_WITH_LONG_LONG #if !defined(DOCTEST_CONFIG_WITH_LONG_LONG) && defined(_MSC_VER) && (_MSC_VER >= 1400) #define DOCTEST_CONFIG_WITH_LONG_LONG #endif // _MSC_VER #endif // DOCTEST_CONFIG_WITH_LONG_LONG #if defined(DOCTEST_CONFIG_NO_LONG_LONG) && defined(DOCTEST_CONFIG_WITH_LONG_LONG) #undef DOCTEST_CONFIG_WITH_LONG_LONG #endif // DOCTEST_CONFIG_NO_LONG_LONG // static_assert #ifndef DOCTEST_CONFIG_WITH_STATIC_ASSERT #ifdef __clang__ #if __has_feature(cxx_static_assert) #define DOCTEST_CONFIG_WITH_STATIC_ASSERT #endif // __has_feature(cxx_static_assert) #endif // __clang__ #if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ >= 3 && defined(__GXX_EXPERIMENTAL_CXX0X__) #define DOCTEST_CONFIG_WITH_STATIC_ASSERT #endif // __GNUC__ #if defined(_MSC_VER) && (_MSC_VER >= 1600) // MSVC 2010 #define DOCTEST_CONFIG_WITH_STATIC_ASSERT #endif // _MSC_VER #endif // DOCTEST_CONFIG_WITH_STATIC_ASSERT #if defined(DOCTEST_CONFIG_NO_STATIC_ASSERT) && defined(DOCTEST_CONFIG_WITH_STATIC_ASSERT) #undef DOCTEST_CONFIG_WITH_STATIC_ASSERT #endif // DOCTEST_CONFIG_NO_STATIC_ASSERT #if defined(DOCTEST_CONFIG_WITH_NULLPTR) || defined(DOCTEST_CONFIG_WITH_LONG_LONG) || \ defined(DOCTEST_CONFIG_WITH_STATIC_ASSERT) #define DOCTEST_NO_CPP11_COMPAT #endif // c++11 stuff #if defined(__clang__) && defined(DOCTEST_NO_CPP11_COMPAT) #pragma clang diagnostic ignored "-Wc++98-compat" #pragma clang diagnostic ignored "-Wc++98-compat-pedantic" #endif // __clang__ && DOCTEST_NO_CPP11_COMPAT #ifndef DOCTEST_CONFIG_NO_EXCEPTIONS #if defined(__GNUC__) && !defined(__EXCEPTIONS) #define DOCTEST_CONFIG_NO_EXCEPTIONS #endif // clang and gcc // in MSVC _HAS_EXCEPTIONS is defined in a header instead of as a project define // so we can't do the automatic detection for MSVC without including some header #endif // DOCTEST_CONFIG_NO_EXCEPTIONS #if defined(DOCTEST_CONFIG_NO_EXCEPTIONS) && !defined(DOCTEST_CONFIG_NO_TRY_CATCH_IN_ASSERTS) #define DOCTEST_CONFIG_NO_TRY_CATCH_IN_ASSERTS #endif // DOCTEST_CONFIG_NO_EXCEPTIONS && !DOCTEST_CONFIG_NO_TRY_CATCH_IN_ASSERTS // ================================================================================================= // == MODERN C++ FEATURE DETECTION END ============================================================= // ================================================================================================= // internal macros for string concatenation and anonymous variable name generation #define DOCTEST_CAT_IMPL(s1, s2) s1##s2 #define DOCTEST_CAT(s1, s2) DOCTEST_CAT_IMPL(s1, s2) #ifdef __COUNTER__ // not standard and may be missing for some compilers #define DOCTEST_ANONYMOUS(x) DOCTEST_CAT(x, __COUNTER__) #else // __COUNTER__ #define DOCTEST_ANONYMOUS(x) DOCTEST_CAT(x, __LINE__) #endif // __COUNTER__ // macro for making a string out of an identifier #define DOCTEST_TOSTR_IMPL(x) #x #define DOCTEST_TOSTR(x) DOCTEST_TOSTR_IMPL(x) // for concatenating literals and making the result a string #define DOCTEST_STR_CONCAT_TOSTR(s1, s2) DOCTEST_TOSTR(s1) DOCTEST_TOSTR(s2) // counts the number of elements in a C string #define DOCTEST_COUNTOF(x) (sizeof(x) / sizeof(x[0])) #ifndef DOCTEST_CONFIG_ASSERTION_PARAMETERS_BY_VALUE #define DOCTEST_REF_WRAP(x) x& #else // DOCTEST_CONFIG_ASSERTION_PARAMETERS_BY_VALUE #define DOCTEST_REF_WRAP(x) x #endif // DOCTEST_CONFIG_ASSERTION_PARAMETERS_BY_VALUE // not using __APPLE__ because... this is how Catch does it #if defined(__MAC_OS_X_VERSION_MIN_REQUIRED) #define DOCTEST_PLATFORM_MAC #elif defined(__IPHONE_OS_VERSION_MIN_REQUIRED) #define DOCTEST_PLATFORM_IPHONE #elif defined(_WIN32) || defined(_MSC_VER) #define DOCTEST_PLATFORM_WINDOWS #else #define DOCTEST_PLATFORM_LINUX #endif #define DOCTEST_GCS() (*doctest::detail::getTestsContextState()) // should probably take a look at https://github.com/scottt/debugbreak #ifdef DOCTEST_PLATFORM_MAC // The following code snippet based on: // http://cocoawithlove.com/2008/03/break-into-debugger.html #if defined(__ppc64__) || defined(__ppc__) #define DOCTEST_BREAK_INTO_DEBUGGER() \ __asm__("li r0, 20\nsc\nnop\nli r0, 37\nli r4, 2\nsc\nnop\n" : : : "memory", "r0", "r3", "r4") #else // __ppc64__ || __ppc__ #define DOCTEST_BREAK_INTO_DEBUGGER() __asm__("int $3\n" : :) #endif // __ppc64__ || __ppc__ #elif defined(_MSC_VER) #define DOCTEST_BREAK_INTO_DEBUGGER() __debugbreak() #elif defined(__MINGW32__) extern "C" __declspec(dllimport) void __stdcall DebugBreak(); #define DOCTEST_BREAK_INTO_DEBUGGER() ::DebugBreak() #else // linux #define DOCTEST_BREAK_INTO_DEBUGGER() ((void)0) #endif // linux #define DOCTEST_BREAK_INTO_DEBUGGER_CHECKED() \ if(doctest::detail::isDebuggerActive() && !DOCTEST_GCS().no_breaks) \ DOCTEST_BREAK_INTO_DEBUGGER(); #ifdef __clang__ // to detect if libc++ is being used with clang (the _LIBCPP_VERSION identifier) #include #endif // __clang__ #ifdef _LIBCPP_VERSION // not forward declaring ostream for libc++ because I had some problems (inline namespaces vs c++98) // so the header is used - also it is very light and doesn't drag a ton of stuff #include #else // _LIBCPP_VERSION #ifndef DOCTEST_CONFIG_USE_IOSFWD namespace std { template struct char_traits; template <> struct char_traits; template class basic_ostream; typedef basic_ostream > ostream; } #else // DOCTEST_CONFIG_USE_IOSFWD #include #endif // DOCTEST_CONFIG_USE_IOSFWD #endif // _LIBCPP_VERSION // static assert macro - because of the c++98 support requires that the message is an // identifier (no spaces and not a C string) - example without quotes: I_am_a_message // taken from here: http://stackoverflow.com/a/1980156/3162383 #ifdef DOCTEST_CONFIG_WITH_STATIC_ASSERT #define DOCTEST_STATIC_ASSERT(expression, message) static_assert(expression, #message) #else // DOCTEST_CONFIG_WITH_STATIC_ASSERT #define DOCTEST_STATIC_ASSERT(expression, message) \ struct DOCTEST_CAT(__static_assertion_at_line_, __LINE__) \ { \ doctest::detail::static_assert_impl::StaticAssertion((expression))> \ DOCTEST_CAT(DOCTEST_CAT(DOCTEST_CAT(STATIC_ASSERTION_FAILED_AT_LINE_, __LINE__), \ _), \ message); \ }; \ typedef doctest::detail::static_assert_impl::StaticAssertionTest \ DOCTEST_CAT(__static_assertion_test_at_line_, __LINE__) #endif // DOCTEST_CONFIG_WITH_STATIC_ASSERT #ifdef DOCTEST_CONFIG_WITH_NULLPTR #ifdef _LIBCPP_VERSION #include #else // _LIBCPP_VERSION namespace std { typedef decltype(nullptr) nullptr_t; } #endif // _LIBCPP_VERSION #endif // DOCTEST_CONFIG_WITH_NULLPTR namespace doctest { class String { char* m_str; void copy(const String& other); public: String(const char* in = ""); String(const String& other); ~String(); String& operator=(const String& other); String operator+(const String& other) const; String& operator+=(const String& other); char& operator[](unsigned pos) { return m_str[pos]; } const char& operator[](unsigned pos) const { return m_str[pos]; } char* c_str() { return m_str; } const char* c_str() const { return m_str; } unsigned size() const; unsigned length() const; int compare(const char* other, bool no_case = false) const; int compare(const String& other, bool no_case = false) const; }; // clang-format off inline bool operator==(const String& lhs, const String& rhs) { return lhs.compare(rhs) == 0; } inline bool operator!=(const String& lhs, const String& rhs) { return lhs.compare(rhs) != 0; } inline bool operator< (const String& lhs, const String& rhs) { return lhs.compare(rhs) < 0; } inline bool operator> (const String& lhs, const String& rhs) { return lhs.compare(rhs) > 0; } inline bool operator<=(const String& lhs, const String& rhs) { return (lhs != rhs) ? lhs.compare(rhs) < 0 : true; } inline bool operator>=(const String& lhs, const String& rhs) { return (lhs != rhs) ? lhs.compare(rhs) > 0 : true; } // clang-format on std::ostream& operator<<(std::ostream& stream, const String& in); namespace detail { #ifndef DOCTEST_CONFIG_WITH_STATIC_ASSERT namespace static_assert_impl { template struct StaticAssertion; template <> struct StaticAssertion {}; template struct StaticAssertionTest {}; } // namespace static_assert_impl #endif // DOCTEST_CONFIG_WITH_STATIC_ASSERT template struct deferred_false { static const bool value = false; }; namespace has_insertion_operator_impl { typedef char no; typedef char yes[2]; struct any_t { template any_t(const DOCTEST_REF_WRAP(T)); }; yes& testStreamable(std::ostream&); no testStreamable(no); no operator<<(const std::ostream&, const any_t&); template struct has_insertion_operator { static std::ostream& s; static const DOCTEST_REF_WRAP(T) t; static const bool value = sizeof(testStreamable(s << t)) == sizeof(yes); }; } // namespace has_insertion_operator_impl template struct has_insertion_operator : has_insertion_operator_impl::has_insertion_operator {}; std::ostream* createStream(); String getStreamResult(std::ostream*); void freeStream(std::ostream*); template struct StringMakerBase { template static String convert(const DOCTEST_REF_WRAP(T)) { return "{?}"; } }; template <> struct StringMakerBase { template static String convert(const DOCTEST_REF_WRAP(T) in) { std::ostream* stream = createStream(); *stream << in; String result = getStreamResult(stream); freeStream(stream); return result; } }; String rawMemoryToString(const void* object, unsigned size); template String rawMemoryToString(const DOCTEST_REF_WRAP(T) object) { return rawMemoryToString(&object, sizeof(object)); } } // namespace detail template struct StringMaker : detail::StringMakerBase::value> {}; template struct StringMaker { template static String convert(U* p) { if(!p) return "NULL"; else return detail::rawMemoryToString(p); } }; template struct StringMaker { static String convert(R C::*p) { if(!p) return "NULL"; else return detail::rawMemoryToString(p); } }; template String toString(const DOCTEST_REF_WRAP(T) value) { return StringMaker::convert(value); } #ifdef DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING String toString(char* in); String toString(const char* in); #endif // DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING String toString(bool in); String toString(float in); String toString(double in); String toString(double long in); String toString(char in); String toString(char unsigned in); String toString(int short in); String toString(int short unsigned in); String toString(int in); String toString(int unsigned in); String toString(int long in); String toString(int long unsigned in); #ifdef DOCTEST_CONFIG_WITH_LONG_LONG String toString(int long long in); String toString(int long long unsigned in); #endif // DOCTEST_CONFIG_WITH_LONG_LONG #ifdef DOCTEST_CONFIG_WITH_NULLPTR String toString(std::nullptr_t in); #endif // DOCTEST_CONFIG_WITH_NULLPTR class Approx { public: explicit Approx(double value); Approx(Approx const& other) : m_epsilon(other.m_epsilon) , m_scale(other.m_scale) , m_value(other.m_value) {} Approx operator()(double value) { Approx approx(value); approx.epsilon(m_epsilon); approx.scale(m_scale); return approx; } friend bool operator==(double lhs, Approx const& rhs); friend bool operator==(Approx const& lhs, double rhs) { return operator==(rhs, lhs); } friend bool operator!=(double lhs, Approx const& rhs) { return !operator==(lhs, rhs); } friend bool operator!=(Approx const& lhs, double rhs) { return !operator==(rhs, lhs); } Approx& epsilon(double newEpsilon) { m_epsilon = newEpsilon; return *this; } Approx& scale(double newScale) { m_scale = newScale; return *this; } String toString() const; private: double m_epsilon; double m_scale; double m_value; }; template <> inline String toString(const DOCTEST_REF_WRAP(Approx) value) { return value.toString(); } #if !defined(DOCTEST_CONFIG_DISABLE) namespace detail { // the function type this library works with typedef void (*funcType)(void); namespace assertType { enum Enum { // macro traits is_warn = 1, is_check = 2, is_require = 4, is_throws = 8, is_throws_as = 16, is_nothrow = 32, is_fast = 64, // not checked anywhere - used just to distinguish the types is_false = 128, is_unary = 256, is_eq = 512, is_ne = 1024, is_lt = 2048, is_gt = 4096, is_ge = 8192, is_le = 16384, // macro types DT_WARN = is_warn, DT_CHECK = is_check, DT_REQUIRE = is_require, DT_WARN_FALSE = is_false | is_warn, DT_CHECK_FALSE = is_false | is_check, DT_REQUIRE_FALSE = is_false | is_require, DT_WARN_THROWS = is_throws | is_warn, DT_CHECK_THROWS = is_throws | is_check, DT_REQUIRE_THROWS = is_throws | is_require, DT_WARN_THROWS_AS = is_throws_as | is_warn, DT_CHECK_THROWS_AS = is_throws_as | is_check, DT_REQUIRE_THROWS_AS = is_throws_as | is_require, DT_WARN_NOTHROW = is_nothrow | is_warn, DT_CHECK_NOTHROW = is_nothrow | is_check, DT_REQUIRE_NOTHROW = is_nothrow | is_require, DT_WARN_EQ = is_eq | is_warn, DT_CHECK_EQ = is_eq | is_check, DT_REQUIRE_EQ = is_eq | is_require, DT_WARN_NE = is_ne | is_warn, DT_CHECK_NE = is_ne | is_check, DT_REQUIRE_NE = is_ne | is_require, DT_WARN_GT = is_gt | is_warn, DT_CHECK_GT = is_gt | is_check, DT_REQUIRE_GT = is_gt | is_require, DT_WARN_LT = is_lt | is_warn, DT_CHECK_LT = is_lt | is_check, DT_REQUIRE_LT = is_lt | is_require, DT_WARN_GE = is_ge | is_warn, DT_CHECK_GE = is_ge | is_check, DT_REQUIRE_GE = is_ge | is_require, DT_WARN_LE = is_le | is_warn, DT_CHECK_LE = is_le | is_check, DT_REQUIRE_LE = is_le | is_require, DT_WARN_UNARY = is_unary | is_warn, DT_CHECK_UNARY = is_unary | is_check, DT_REQUIRE_UNARY = is_unary | is_require, DT_WARN_UNARY_FALSE = is_false | is_unary | is_warn, DT_CHECK_UNARY_FALSE = is_false | is_unary | is_check, DT_REQUIRE_UNARY_FALSE = is_false | is_unary | is_require, DT_FAST_WARN_EQ = is_fast | is_eq | is_warn, DT_FAST_CHECK_EQ = is_fast | is_eq | is_check, DT_FAST_REQUIRE_EQ = is_fast | is_eq | is_require, DT_FAST_WARN_NE = is_fast | is_ne | is_warn, DT_FAST_CHECK_NE = is_fast | is_ne | is_check, DT_FAST_REQUIRE_NE = is_fast | is_ne | is_require, DT_FAST_WARN_GT = is_fast | is_gt | is_warn, DT_FAST_CHECK_GT = is_fast | is_gt | is_check, DT_FAST_REQUIRE_GT = is_fast | is_gt | is_require, DT_FAST_WARN_LT = is_fast | is_lt | is_warn, DT_FAST_CHECK_LT = is_fast | is_lt | is_check, DT_FAST_REQUIRE_LT = is_fast | is_lt | is_require, DT_FAST_WARN_GE = is_fast | is_ge | is_warn, DT_FAST_CHECK_GE = is_fast | is_ge | is_check, DT_FAST_REQUIRE_GE = is_fast | is_ge | is_require, DT_FAST_WARN_LE = is_fast | is_le | is_warn, DT_FAST_CHECK_LE = is_fast | is_le | is_check, DT_FAST_REQUIRE_LE = is_fast | is_le | is_require, DT_FAST_WARN_UNARY = is_fast | is_unary | is_warn, DT_FAST_CHECK_UNARY = is_fast | is_unary | is_check, DT_FAST_REQUIRE_UNARY = is_fast | is_unary | is_require, DT_FAST_WARN_UNARY_FALSE = is_fast | is_false | is_unary | is_warn, DT_FAST_CHECK_UNARY_FALSE = is_fast | is_false | is_unary | is_check, DT_FAST_REQUIRE_UNARY_FALSE = is_fast | is_false | is_unary | is_require }; } // namespace assertType const char* getAssertString(assertType::Enum val); // clang-format off template struct decay_array { typedef T type; }; template struct decay_array { typedef T* type; }; template struct decay_array { typedef T* type; }; template struct not_char_pointer { enum { value = true }; }; template<> struct not_char_pointer { enum { value = false }; }; template<> struct not_char_pointer { enum { value = false }; }; template struct can_use_op : not_char_pointer::type> {}; template struct enable_if {}; template struct enable_if { typedef T type; }; // clang-format on struct TestFailureException {}; bool checkIfShouldThrow(assertType::Enum assert_type); void fastAssertThrowIfFlagSet(int flags); void throwException(); bool always_false(); // a struct defining a registered test callback struct TestData { // not used for determining uniqueness const char* m_suite; // the test suite in which the test was added const char* m_name; // name of the test function funcType m_f; // a function pointer to the test function // fields by which uniqueness of test cases shall be determined const char* m_file; // the file in which the test was registered unsigned m_line; // the line where the test was registered TestData(const char* suite, const char* name, funcType f, const char* file, unsigned line) : m_suite(suite) , m_name(name) , m_f(f) , m_file(file) , m_line(line) {} bool operator<(const TestData& other) const; }; struct SubcaseSignature { const char* m_name; const char* m_file; int m_line; SubcaseSignature(const char* name, const char* file, int line) : m_name(name) , m_file(file) , m_line(line) {} bool operator<(const SubcaseSignature& other) const; }; struct Subcase { SubcaseSignature m_signature; bool m_entered; Subcase(const char* name, const char* file, int line); Subcase(const Subcase& other); ~Subcase(); operator bool() const { return m_entered; } }; template String stringifyBinaryExpr(const DOCTEST_REF_WRAP(L) lhs, const char* op, const DOCTEST_REF_WRAP(R) rhs) { return toString(lhs) + op + toString(rhs); } struct Result { bool m_passed; String m_decomposition; // to fix gcc 4.7 "-Winline" warnings #if defined(__GNUC__) && !defined(__clang__) __attribute__((noinline)) #endif ~Result() { } Result(bool passed = false, const String& decomposition = String()) : m_passed(passed) , m_decomposition(decomposition) {} Result(const Result& other) : m_passed(other.m_passed) , m_decomposition(other.m_decomposition) {} // to fix gcc 4.7 "-Winline" warnings #if defined(__GNUC__) && !defined(__clang__) __attribute__((noinline)) #endif Result& operator=(const Result& other) { m_passed = other.m_passed; m_decomposition = other.m_decomposition; return *this; } operator bool() { return !m_passed; } void invert() { m_passed = !m_passed; } // clang-format off // forbidding some expressions based on this table: http://en.cppreference.com/w/cpp/language/operator_precedence template Result operator& (const R&) { DOCTEST_STATIC_ASSERT(deferred_false::value, Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison); return Result(); } template Result operator^ (const R&) { DOCTEST_STATIC_ASSERT(deferred_false::value, Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison); return Result(); } template Result operator| (const R&) { DOCTEST_STATIC_ASSERT(deferred_false::value, Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison); return Result(); } template Result operator&& (const R&) { DOCTEST_STATIC_ASSERT(deferred_false::value, Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison); return Result(); } template Result operator|| (const R&) { DOCTEST_STATIC_ASSERT(deferred_false::value, Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison); return Result(); } template Result operator== (const R&) { DOCTEST_STATIC_ASSERT(deferred_false::value, Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison); return Result(); } template Result operator!= (const R&) { DOCTEST_STATIC_ASSERT(deferred_false::value, Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison); return Result(); } template Result operator< (const R&) { DOCTEST_STATIC_ASSERT(deferred_false::value, Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison); return Result(); } template Result operator> (const R&) { DOCTEST_STATIC_ASSERT(deferred_false::value, Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison); return Result(); } template Result operator<= (const R&) { DOCTEST_STATIC_ASSERT(deferred_false::value, Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison); return Result(); } template Result operator>= (const R&) { DOCTEST_STATIC_ASSERT(deferred_false::value, Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison); return Result(); } template Result operator= (const R&) { DOCTEST_STATIC_ASSERT(deferred_false::value, Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison); return Result(); } template Result operator+= (const R&) { DOCTEST_STATIC_ASSERT(deferred_false::value, Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison); return Result(); } template Result operator-= (const R&) { DOCTEST_STATIC_ASSERT(deferred_false::value, Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison); return Result(); } template Result operator*= (const R&) { DOCTEST_STATIC_ASSERT(deferred_false::value, Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison); return Result(); } template Result operator/= (const R&) { DOCTEST_STATIC_ASSERT(deferred_false::value, Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison); return Result(); } template Result operator%= (const R&) { DOCTEST_STATIC_ASSERT(deferred_false::value, Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison); return Result(); } template Result operator<<=(const R&) { DOCTEST_STATIC_ASSERT(deferred_false::value, Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison); return Result(); } template Result operator>>=(const R&) { DOCTEST_STATIC_ASSERT(deferred_false::value, Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison); return Result(); } template Result operator&= (const R&) { DOCTEST_STATIC_ASSERT(deferred_false::value, Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison); return Result(); } template Result operator^= (const R&) { DOCTEST_STATIC_ASSERT(deferred_false::value, Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison); return Result(); } template Result operator|= (const R&) { DOCTEST_STATIC_ASSERT(deferred_false::value, Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison); return Result(); } // clang-format on }; #ifndef DOCTEST_CONFIG_NO_COMPARISON_WARNING_SUPPRESSION #if defined(__clang__) #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wsign-conversion" #pragma clang diagnostic ignored "-Wsign-compare" #pragma clang diagnostic ignored "-Wdouble-promotion" //#pragma clang diagnostic ignored "-Wconversion" //#pragma clang diagnostic ignored "-Wfloat-equal" #endif // __clang__ #if defined(__GNUC__) && !defined(__clang__) #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 6) #pragma GCC diagnostic push #endif // > gcc 4.6 #pragma GCC diagnostic ignored "-Wsign-conversion" #pragma GCC diagnostic ignored "-Wsign-compare" #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 5) #pragma GCC diagnostic ignored "-Wdouble-promotion" #endif // > gcc 4.5 //#pragma GCC diagnostic ignored "-Wconversion" //#pragma GCC diagnostic ignored "-Wfloat-equal" #endif // __GNUC__ #ifdef _MSC_VER #pragma warning(push) // http://stackoverflow.com/questions/39479163 what's the difference between C4018 and C4389 #pragma warning(disable : 4389) // 'operator' : signed/unsigned mismatch #pragma warning(disable : 4018) // 'expression' : signed/unsigned mismatch //#pragma warning(disable : 4805) // 'operation' : unsafe mix of type 'type' and type 'type' in operation #endif // _MSC_VER #endif // DOCTEST_CONFIG_NO_COMPARISON_WARNING_SUPPRESSION // clang-format off #ifndef DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING #define DOCTEST_COMPARISON_RETURN_TYPE bool #else // DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING #define DOCTEST_COMPARISON_RETURN_TYPE typename enable_if::value || can_use_op::value, bool>::type inline bool eq(const char* lhs, const char* rhs) { return String(lhs) == String(rhs); } inline bool ne(const char* lhs, const char* rhs) { return String(lhs) != String(rhs); } inline bool lt(const char* lhs, const char* rhs) { return String(lhs) < String(rhs); } inline bool gt(const char* lhs, const char* rhs) { return String(lhs) > String(rhs); } inline bool le(const char* lhs, const char* rhs) { return String(lhs) <= String(rhs); } inline bool ge(const char* lhs, const char* rhs) { return String(lhs) >= String(rhs); } #endif // DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING template DOCTEST_COMPARISON_RETURN_TYPE eq(const DOCTEST_REF_WRAP(L) lhs, const DOCTEST_REF_WRAP(R) rhs) { return lhs == rhs; } template DOCTEST_COMPARISON_RETURN_TYPE ne(const DOCTEST_REF_WRAP(L) lhs, const DOCTEST_REF_WRAP(R) rhs) { return lhs != rhs; } template DOCTEST_COMPARISON_RETURN_TYPE lt(const DOCTEST_REF_WRAP(L) lhs, const DOCTEST_REF_WRAP(R) rhs) { return lhs < rhs; } template DOCTEST_COMPARISON_RETURN_TYPE gt(const DOCTEST_REF_WRAP(L) lhs, const DOCTEST_REF_WRAP(R) rhs) { return lhs > rhs; } template DOCTEST_COMPARISON_RETURN_TYPE le(const DOCTEST_REF_WRAP(L) lhs, const DOCTEST_REF_WRAP(R) rhs) { return lhs <= rhs; } template DOCTEST_COMPARISON_RETURN_TYPE ge(const DOCTEST_REF_WRAP(L) lhs, const DOCTEST_REF_WRAP(R) rhs) { return lhs >= rhs; } // clang-format on template struct Expression_lhs { L lhs; Expression_lhs(L in) : lhs(in) {} Expression_lhs(const Expression_lhs& other) : lhs(other.lhs) {} operator Result() { return Result(!!lhs, toString(lhs)); } // clang-format off #ifndef DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING template Result operator==(const DOCTEST_REF_WRAP(R) rhs) { return Result(lhs == rhs, stringifyBinaryExpr(lhs, " == ", rhs)); } template Result operator!=(const DOCTEST_REF_WRAP(R) rhs) { return Result(lhs != rhs, stringifyBinaryExpr(lhs, " != ", rhs)); } template Result operator< (const DOCTEST_REF_WRAP(R) rhs) { return Result(lhs < rhs, stringifyBinaryExpr(lhs, " < " , rhs)); } template Result operator<=(const DOCTEST_REF_WRAP(R) rhs) { return Result(lhs <= rhs, stringifyBinaryExpr(lhs, " <= ", rhs)); } template Result operator> (const DOCTEST_REF_WRAP(R) rhs) { return Result(lhs > rhs, stringifyBinaryExpr(lhs, " > " , rhs)); } template Result operator>=(const DOCTEST_REF_WRAP(R) rhs) { return Result(lhs >= rhs, stringifyBinaryExpr(lhs, " >= ", rhs)); } #else // DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING template Result operator==(const DOCTEST_REF_WRAP(R) rhs) { return Result(eq(lhs, rhs), stringifyBinaryExpr(lhs, " == ", rhs)); } template Result operator!=(const DOCTEST_REF_WRAP(R) rhs) { return Result(ne(lhs, rhs), stringifyBinaryExpr(lhs, " != ", rhs)); } template Result operator< (const DOCTEST_REF_WRAP(R) rhs) { return Result(lt(lhs, rhs), stringifyBinaryExpr(lhs, " < " , rhs)); } template Result operator<=(const DOCTEST_REF_WRAP(R) rhs) { return Result(le(lhs, rhs), stringifyBinaryExpr(lhs, " <= ", rhs)); } template Result operator> (const DOCTEST_REF_WRAP(R) rhs) { return Result(gt(lhs, rhs), stringifyBinaryExpr(lhs, " > " , rhs)); } template Result operator>=(const DOCTEST_REF_WRAP(R) rhs) { return Result(ge(lhs, rhs), stringifyBinaryExpr(lhs, " >= ", rhs)); } #endif // DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING // clang-format on // clang-format off // forbidding some expressions based on this table: http://en.cppreference.com/w/cpp/language/operator_precedence template int operator& (const R&) { DOCTEST_STATIC_ASSERT(deferred_false::value, Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison); return int(); } template int operator^ (const R&) { DOCTEST_STATIC_ASSERT(deferred_false::value, Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison); return int(); } template int operator| (const R&) { DOCTEST_STATIC_ASSERT(deferred_false::value, Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison); return int(); } template int operator&& (const R&) { DOCTEST_STATIC_ASSERT(deferred_false::value, Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison); return int(); } template int operator|| (const R&) { DOCTEST_STATIC_ASSERT(deferred_false::value, Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison); return int(); } template int operator= (const R&) { DOCTEST_STATIC_ASSERT(deferred_false::value, Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison); return int(); } template int operator+= (const R&) { DOCTEST_STATIC_ASSERT(deferred_false::value, Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison); return int(); } template int operator-= (const R&) { DOCTEST_STATIC_ASSERT(deferred_false::value, Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison); return int(); } template int operator*= (const R&) { DOCTEST_STATIC_ASSERT(deferred_false::value, Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison); return int(); } template int operator/= (const R&) { DOCTEST_STATIC_ASSERT(deferred_false::value, Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison); return int(); } template int operator%= (const R&) { DOCTEST_STATIC_ASSERT(deferred_false::value, Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison); return int(); } template int operator<<=(const R&) { DOCTEST_STATIC_ASSERT(deferred_false::value, Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison); return int(); } template int operator>>=(const R&) { DOCTEST_STATIC_ASSERT(deferred_false::value, Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison); return int(); } template int operator&= (const R&) { DOCTEST_STATIC_ASSERT(deferred_false::value, Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison); return int(); } template int operator^= (const R&) { DOCTEST_STATIC_ASSERT(deferred_false::value, Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison); return int(); } template int operator|= (const R&) { DOCTEST_STATIC_ASSERT(deferred_false::value, Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison); return int(); } // these 2 are unfortunate because they should be allowed - they have higher precedence over the comparisons, but the // ExpressionDecomposer class uses the left shift operator to capture the left operand of the binary expression... template int operator<< (const R&) { DOCTEST_STATIC_ASSERT(deferred_false::value, Please_Surround_The_Left_Shift_Operation_With_Parenthesis); return int(); } template int operator>> (const R&) { DOCTEST_STATIC_ASSERT(deferred_false::value, Please_Surround_The_Right_Shift_Operation_With_Parenthesis); return int(); } // clang-format on }; #ifndef DOCTEST_CONFIG_NO_COMPARISON_WARNING_SUPPRESSION #if defined(__clang__) #pragma clang diagnostic pop #endif // __clang__ #if defined(__GNUC__) && !defined(__clang__) #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 6) #pragma GCC diagnostic pop #endif // > gcc 4.6 #endif // __GNUC__ #ifdef _MSC_VER #pragma warning(pop) #endif // _MSC_VER #endif // DOCTEST_CONFIG_NO_COMPARISON_WARNING_SUPPRESSION struct ExpressionDecomposer { template Expression_lhs operator<<(const DOCTEST_REF_WRAP(L) operand) { return Expression_lhs(operand); } }; // forward declarations of functions used by the macros int regTest(void (*f)(void), unsigned line, const char* file, const char* name); int setTestSuiteName(const char* name); void addFailedAssert(assertType::Enum assert_type); void logTestStart(const char* name, const char* file, unsigned line); void logTestEnd(); void logTestCrashed(); void logAssert(bool passed, const char* decomposition, bool threw, const char* expr, assertType::Enum assert_type, const char* file, int line); void logAssertThrows(bool threw, const char* expr, assertType::Enum assert_type, const char* file, int line); void logAssertThrowsAs(bool threw, bool threw_as, const char* as, const char* expr, assertType::Enum assert_type, const char* file, int line); void logAssertNothrow(bool threw, const char* expr, assertType::Enum assert_type, const char* file, int line); bool isDebuggerActive(); void writeToDebugConsole(const String&); struct TestAccessibleContextState { bool success; // include successful assertions in output bool no_throw; // to skip exceptions-related assertion macros bool no_breaks; // to not break into the debugger const TestData* currentTest; bool hasLoggedCurrentTestStart; int numAssertionsForCurrentTestcase; }; struct ContextState; TestAccessibleContextState* getTestsContextState(); namespace binaryAssertComparison { enum Enum { eq = 0, ne, gt, lt, ge, le }; } // namespace binaryAssertComparison // clang-format off template struct RelationalComparator { bool operator()(const DOCTEST_REF_WRAP(L), const DOCTEST_REF_WRAP(R) ) const { return false; } }; template struct RelationalComparator<0, L, R> { bool operator()(const DOCTEST_REF_WRAP(L) lhs, const DOCTEST_REF_WRAP(R) rhs) const { return eq(lhs, rhs); } }; template struct RelationalComparator<1, L, R> { bool operator()(const DOCTEST_REF_WRAP(L) lhs, const DOCTEST_REF_WRAP(R) rhs) const { return ne(lhs, rhs); } }; template struct RelationalComparator<2, L, R> { bool operator()(const DOCTEST_REF_WRAP(L) lhs, const DOCTEST_REF_WRAP(R) rhs) const { return gt(lhs, rhs); } }; template struct RelationalComparator<3, L, R> { bool operator()(const DOCTEST_REF_WRAP(L) lhs, const DOCTEST_REF_WRAP(R) rhs) const { return lt(lhs, rhs); } }; template struct RelationalComparator<4, L, R> { bool operator()(const DOCTEST_REF_WRAP(L) lhs, const DOCTEST_REF_WRAP(R) rhs) const { return ge(lhs, rhs); } }; template struct RelationalComparator<5, L, R> { bool operator()(const DOCTEST_REF_WRAP(L) lhs, const DOCTEST_REF_WRAP(R) rhs) const { return le(lhs, rhs); } }; // clang-format on struct ResultBuilder { assertType::Enum m_assert_type; const char* m_file; int m_line; const char* m_expr; const char* m_exception_type; Result m_result; bool m_threw; bool m_threw_as; bool m_failed; ResultBuilder(assertType::Enum assert_type, const char* file, int line, const char* expr, const char* exception_type = ""); // to fix gcc 4.7 "-Winline" warnings #if defined(__GNUC__) && !defined(__clang__) __attribute__((noinline)) #endif ~ResultBuilder() { } void setResult(const Result& res) { m_result = res; } template void binary_assert(const DOCTEST_REF_WRAP(L) lhs, const DOCTEST_REF_WRAP(R) rhs) { m_result.m_passed = RelationalComparator()(lhs, rhs); m_result.m_decomposition = stringifyBinaryExpr(lhs, ", ", rhs); } template void unary_assert(const DOCTEST_REF_WRAP(L) val) { m_result.m_passed = !!val; m_result.m_decomposition = toString(val); } bool log(); void react() const; }; namespace assertAction { enum Enum { nothing = 0, dbgbreak = 1, shouldthrow = 2 }; } // namespace assertAction template int fast_binary_assert(assertType::Enum assert_type, const char* file, int line, const char* lhs_str, const char* rhs_str, const DOCTEST_REF_WRAP(L) lhs, const DOCTEST_REF_WRAP(R) rhs) { String expr = String(lhs_str) + ", " + rhs_str; const char* expr_str = expr.c_str(); ResultBuilder rb(assert_type, file, line, expr_str); rb.m_result.m_passed = RelationalComparator()(lhs, rhs); rb.m_result.m_decomposition = stringifyBinaryExpr(lhs, ", ", rhs); int res = 0; if(rb.log()) res |= assertAction::dbgbreak; if(rb.m_failed && checkIfShouldThrow(assert_type)) res |= assertAction::shouldthrow; #ifdef DOCTEST_CONFIG_SUPER_FAST_ASSERTS // ######################################################################################### // IF THE DEBUGGER BREAKS HERE - GO 1 LEVEL UP IN THE CALLSTACK TO SEE THE FAILING ASSERTION // THIS IS THE EFFECT OF HAVING 'DOCTEST_CONFIG_SUPER_FAST_ASSERTS' DEFINED // ######################################################################################### if(res & assertAction::dbgbreak) DOCTEST_BREAK_INTO_DEBUGGER(); fastAssertThrowIfFlagSet(res); #endif // DOCTEST_CONFIG_SUPER_FAST_ASSERTS return res; } template int fast_unary_assert(assertType::Enum assert_type, const char* file, int line, const char* val_str, const DOCTEST_REF_WRAP(L) val) { ResultBuilder rb(assert_type, file, line, val_str); rb.m_result.m_passed = !!val; rb.m_result.m_decomposition = toString(val); int res = 0; if(rb.log()) res |= assertAction::dbgbreak; if(rb.m_failed && checkIfShouldThrow(assert_type)) res |= assertAction::shouldthrow; #ifdef DOCTEST_CONFIG_SUPER_FAST_ASSERTS // ######################################################################################### // IF THE DEBUGGER BREAKS HERE - GO 1 LEVEL UP IN THE CALLSTACK TO SEE THE FAILING ASSERTION // THIS IS THE EFFECT OF HAVING 'DOCTEST_CONFIG_SUPER_FAST_ASSERTS' DEFINED // ######################################################################################### if(res & assertAction::dbgbreak) DOCTEST_BREAK_INTO_DEBUGGER(); fastAssertThrowIfFlagSet(res); #endif // DOCTEST_CONFIG_SUPER_FAST_ASSERTS return res; } } // namespace detail #endif // DOCTEST_CONFIG_DISABLE class Context { #if !defined(DOCTEST_CONFIG_DISABLE) detail::ContextState* p; void parseArgs(int argc, const char* const* argv, bool withDefaults = false); #endif // DOCTEST_CONFIG_DISABLE public: Context(int argc = 0, const char* const* argv = 0); // to fix gcc 4.7 "-Winline" warnings #if defined(__GNUC__) && !defined(__clang__) __attribute__((noinline)) #endif ~Context(); void applyCommandLine(int argc, const char* const* argv); void addFilter(const char* filter, const char* value); void clearFilters(); void setOption(const char* option, int value); void setOption(const char* option, const char* value); bool shouldExit(); int run(); }; } // namespace doctest // if registering is not disabled #if !defined(DOCTEST_CONFIG_DISABLE) // registers the test by initializing a dummy var with a function #if defined(__GNUC__) && !defined(__clang__) #define DOCTEST_REGISTER_FUNCTION(f, name) \ static int DOCTEST_ANONYMOUS(_DOCTEST_ANON_VAR_) __attribute__((unused)) = \ doctest::detail::regTest(f, __LINE__, __FILE__, name); #elif defined(__clang__) #define DOCTEST_REGISTER_FUNCTION(f, name) \ _Pragma("clang diagnostic push") \ _Pragma("clang diagnostic ignored \"-Wglobal-constructors\"") static int \ DOCTEST_ANONYMOUS(_DOCTEST_ANON_VAR_) = \ doctest::detail::regTest(f, __LINE__, __FILE__, name); \ _Pragma("clang diagnostic pop") #else // MSVC #define DOCTEST_REGISTER_FUNCTION(f, name) \ static int DOCTEST_ANONYMOUS(_DOCTEST_ANON_VAR_) = \ doctest::detail::regTest(f, __LINE__, __FILE__, name); #endif // MSVC #define DOCTEST_IMPLEMENT_FIXTURE(der, base, func, name) \ namespace \ { \ struct der : base \ { void f(); }; \ static void func() { \ der v; \ v.f(); \ } \ DOCTEST_REGISTER_FUNCTION(func, name) \ } \ inline void der::f() #define DOCTEST_CREATE_AND_REGISTER_FUNCTION(f, name) \ static void f(); \ DOCTEST_REGISTER_FUNCTION(f, name) \ inline void f() // for registering tests #define DOCTEST_TEST_CASE(name) \ DOCTEST_CREATE_AND_REGISTER_FUNCTION(DOCTEST_ANONYMOUS(_DOCTEST_ANON_FUNC_), name) // for registering tests with a fixture #define DOCTEST_TEST_CASE_FIXTURE(c, name) \ DOCTEST_IMPLEMENT_FIXTURE(DOCTEST_ANONYMOUS(_DOCTEST_ANON_CLASS_), c, \ DOCTEST_ANONYMOUS(_DOCTEST_ANON_FUNC_), name) // for subcases #if defined(__GNUC__) #define DOCTEST_SUBCASE(name) \ if(const doctest::detail::Subcase & DOCTEST_ANONYMOUS(_DOCTEST_ANON_SUBCASE_) \ __attribute__((unused)) = \ doctest::detail::Subcase(name, __FILE__, __LINE__)) #else // __GNUC__ #define DOCTEST_SUBCASE(name) \ if(const doctest::detail::Subcase & DOCTEST_ANONYMOUS(_DOCTEST_ANON_SUBCASE_) = \ doctest::detail::Subcase(name, __FILE__, __LINE__)) #endif // __GNUC__ // for starting a testsuite block #if defined(__GNUC__) && !defined(__clang__) #define DOCTEST_TEST_SUITE(name) \ static int DOCTEST_ANONYMOUS(_DOCTEST_ANON_VAR_) __attribute__((unused)) = \ doctest::detail::setTestSuiteName(name); \ typedef int DOCTEST_ANONYMOUS(_DOCTEST_ANON_FOR_SEMICOLON_) #elif defined(__clang__) #define DOCTEST_TEST_SUITE(name) \ _Pragma("clang diagnostic push") \ _Pragma("clang diagnostic ignored \"-Wglobal-constructors\"") static int \ DOCTEST_ANONYMOUS(_DOCTEST_ANON_VAR_) = \ doctest::detail::setTestSuiteName(name); \ _Pragma("clang diagnostic pop") typedef int DOCTEST_ANONYMOUS(_DOCTEST_ANON_FOR_SEMICOLON_) #else // MSVC #define DOCTEST_TEST_SUITE(name) \ static int DOCTEST_ANONYMOUS(_DOCTEST_ANON_VAR_) = doctest::detail::setTestSuiteName(name); \ typedef int DOCTEST_ANONYMOUS(_DOCTEST_ANON_FOR_SEMICOLON_) #endif // MSVC // for ending a testsuite block #if defined(__GNUC__) && !defined(__clang__) #define DOCTEST_TEST_SUITE_END \ static int DOCTEST_ANONYMOUS(_DOCTEST_ANON_VAR_) __attribute__((unused)) = \ doctest::detail::setTestSuiteName(""); \ typedef int DOCTEST_ANONYMOUS(_DOCTEST_ANON_FOR_SEMICOLON_) #elif defined(__clang__) #define DOCTEST_TEST_SUITE_END \ _Pragma("clang diagnostic push") \ _Pragma("clang diagnostic ignored \"-Wglobal-constructors\"") static int \ DOCTEST_ANONYMOUS(_DOCTEST_ANON_VAR_) = doctest::detail::setTestSuiteName(""); \ _Pragma("clang diagnostic pop") typedef int DOCTEST_ANONYMOUS(_DOCTEST_ANON_FOR_SEMICOLON_) #else // MSVC #define DOCTEST_TEST_SUITE_END \ static int DOCTEST_ANONYMOUS(_DOCTEST_ANON_VAR_) = doctest::detail::setTestSuiteName(""); \ typedef int DOCTEST_ANONYMOUS(_DOCTEST_ANON_FOR_SEMICOLON_) #endif // MSVC #define DOCTEST_ASSERT_LOG_AND_REACT(rb) \ if(rb.log()) \ DOCTEST_BREAK_INTO_DEBUGGER(); \ rb.react() #ifdef DOCTEST_CONFIG_NO_TRY_CATCH_IN_ASSERTS #define DOCTEST_WRAP_IN_TRY(x) x; #else // DOCTEST_CONFIG_NO_TRY_CATCH_IN_ASSERTS #define DOCTEST_WRAP_IN_TRY(x) \ try { \ x; \ } catch(...) { _DOCTEST_RB.m_threw = true; } #endif // DOCTEST_CONFIG_NO_TRY_CATCH_IN_ASSERTS #define DOCTEST_ASSERT_IMPLEMENT(expr, assert_type) \ doctest::detail::ResultBuilder _DOCTEST_RB(doctest::detail::assertType::assert_type, __FILE__, \ __LINE__, #expr); \ DOCTEST_WRAP_IN_TRY(_DOCTEST_RB.setResult(doctest::detail::ExpressionDecomposer() << expr)) \ DOCTEST_ASSERT_LOG_AND_REACT(_DOCTEST_RB); #if defined(__clang__) #define DOCTEST_ASSERT_PROXY(expr, assert_type) \ do { \ _Pragma("clang diagnostic push") \ _Pragma("clang diagnostic ignored \"-Woverloaded-shift-op-parentheses\"") \ DOCTEST_ASSERT_IMPLEMENT(expr, assert_type) \ _Pragma("clang diagnostic pop") \ } while(doctest::detail::always_false()) #else // __clang__ #define DOCTEST_ASSERT_PROXY(expr, assert_type) \ do { \ DOCTEST_ASSERT_IMPLEMENT(expr, assert_type) \ } while(doctest::detail::always_false()) #endif // __clang__ #define DOCTEST_WARN(expr) DOCTEST_ASSERT_PROXY(expr, DT_WARN) #define DOCTEST_CHECK(expr) DOCTEST_ASSERT_PROXY(expr, DT_CHECK) #define DOCTEST_REQUIRE(expr) DOCTEST_ASSERT_PROXY(expr, DT_REQUIRE) #define DOCTEST_WARN_FALSE(expr) DOCTEST_ASSERT_PROXY(expr, DT_WARN_FALSE) #define DOCTEST_CHECK_FALSE(expr) DOCTEST_ASSERT_PROXY(expr, DT_CHECK_FALSE) #define DOCTEST_REQUIRE_FALSE(expr) DOCTEST_ASSERT_PROXY(expr, DT_REQUIRE_FALSE) #define DOCTEST_ASSERT_THROWS(expr, assert_type) \ do { \ if(!DOCTEST_GCS().no_throw) { \ doctest::detail::ResultBuilder _DOCTEST_RB(doctest::detail::assertType::assert_type, \ __FILE__, __LINE__, #expr); \ try { \ expr; \ } catch(...) { _DOCTEST_RB.m_threw = true; } \ DOCTEST_ASSERT_LOG_AND_REACT(_DOCTEST_RB); \ } \ } while(doctest::detail::always_false()) #define DOCTEST_ASSERT_THROWS_AS(expr, as, assert_type) \ do { \ if(!DOCTEST_GCS().no_throw) { \ doctest::detail::ResultBuilder _DOCTEST_RB(doctest::detail::assertType::assert_type, \ __FILE__, __LINE__, #expr, #as); \ try { \ expr; \ } catch(as) { \ _DOCTEST_RB.m_threw = true; \ _DOCTEST_RB.m_threw_as = true; \ } catch(...) { _DOCTEST_RB.m_threw = true; } \ DOCTEST_ASSERT_LOG_AND_REACT(_DOCTEST_RB); \ } \ } while(doctest::detail::always_false()) #define DOCTEST_ASSERT_NOTHROW(expr, assert_type) \ do { \ if(!DOCTEST_GCS().no_throw) { \ doctest::detail::ResultBuilder _DOCTEST_RB(doctest::detail::assertType::assert_type, \ __FILE__, __LINE__, #expr); \ try { \ expr; \ } catch(...) { _DOCTEST_RB.m_threw = true; } \ DOCTEST_ASSERT_LOG_AND_REACT(_DOCTEST_RB); \ } \ } while(doctest::detail::always_false()) #define DOCTEST_WARN_THROWS(expr) DOCTEST_ASSERT_THROWS(expr, DT_WARN_THROWS) #define DOCTEST_CHECK_THROWS(expr) DOCTEST_ASSERT_THROWS(expr, DT_CHECK_THROWS) #define DOCTEST_REQUIRE_THROWS(expr) DOCTEST_ASSERT_THROWS(expr, DT_REQUIRE_THROWS) #define DOCTEST_WARN_THROWS_AS(expr, ex) DOCTEST_ASSERT_THROWS_AS(expr, ex, DT_WARN_THROWS_AS) #define DOCTEST_CHECK_THROWS_AS(expr, ex) DOCTEST_ASSERT_THROWS_AS(expr, ex, DT_CHECK_THROWS_AS) #define DOCTEST_REQUIRE_THROWS_AS(expr, ex) DOCTEST_ASSERT_THROWS_AS(expr, ex, DT_REQUIRE_THROWS_AS) #define DOCTEST_WARN_NOTHROW(expr) DOCTEST_ASSERT_NOTHROW(expr, DT_WARN_NOTHROW) #define DOCTEST_CHECK_NOTHROW(expr) DOCTEST_ASSERT_NOTHROW(expr, DT_CHECK_NOTHROW) #define DOCTEST_REQUIRE_NOTHROW(expr) DOCTEST_ASSERT_NOTHROW(expr, DT_REQUIRE_NOTHROW) #define DOCTEST_BINARY_ASSERT(assert_type, lhs, rhs, comp) \ do { \ doctest::detail::ResultBuilder _DOCTEST_RB(doctest::detail::assertType::assert_type, \ __FILE__, __LINE__, #lhs ", " #rhs); \ DOCTEST_WRAP_IN_TRY( \ _DOCTEST_RB.binary_assert(lhs, \ rhs)) \ DOCTEST_ASSERT_LOG_AND_REACT(_DOCTEST_RB); \ } while(doctest::detail::always_false()) #define DOCTEST_UNARY_ASSERT(assert_type, val) \ do { \ doctest::detail::ResultBuilder _DOCTEST_RB(doctest::detail::assertType::assert_type, \ __FILE__, __LINE__, #val); \ DOCTEST_WRAP_IN_TRY(_DOCTEST_RB.unary_assert(val)) \ DOCTEST_ASSERT_LOG_AND_REACT(_DOCTEST_RB); \ } while(doctest::detail::always_false()) #define DOCTEST_WARN_EQ(lhs, rhs) DOCTEST_BINARY_ASSERT(DT_WARN_EQ, lhs, rhs, eq) #define DOCTEST_CHECK_EQ(lhs, rhs) DOCTEST_BINARY_ASSERT(DT_CHECK_EQ, lhs, rhs, eq) #define DOCTEST_REQUIRE_EQ(lhs, rhs) DOCTEST_BINARY_ASSERT(DT_REQUIRE_EQ, lhs, rhs, eq) #define DOCTEST_WARN_NE(lhs, rhs) DOCTEST_BINARY_ASSERT(DT_WARN_NE, lhs, rhs, ne) #define DOCTEST_CHECK_NE(lhs, rhs) DOCTEST_BINARY_ASSERT(DT_CHECK_NE, lhs, rhs, ne) #define DOCTEST_REQUIRE_NE(lhs, rhs) DOCTEST_BINARY_ASSERT(DT_REQUIRE_NE, lhs, rhs, ne) #define DOCTEST_WARN_GT(lhs, rhs) DOCTEST_BINARY_ASSERT(DT_WARN_GT, lhs, rhs, gt) #define DOCTEST_CHECK_GT(lhs, rhs) DOCTEST_BINARY_ASSERT(DT_CHECK_GT, lhs, rhs, gt) #define DOCTEST_REQUIRE_GT(lhs, rhs) DOCTEST_BINARY_ASSERT(DT_REQUIRE_GT, lhs, rhs, gt) #define DOCTEST_WARN_LT(lhs, rhs) DOCTEST_BINARY_ASSERT(DT_WARN_LT, lhs, rhs, lt) #define DOCTEST_CHECK_LT(lhs, rhs) DOCTEST_BINARY_ASSERT(DT_CHECK_LT, lhs, rhs, lt) #define DOCTEST_REQUIRE_LT(lhs, rhs) DOCTEST_BINARY_ASSERT(DT_REQUIRE_LT, lhs, rhs, lt) #define DOCTEST_WARN_GE(lhs, rhs) DOCTEST_BINARY_ASSERT(DT_WARN_GE, lhs, rhs, ge) #define DOCTEST_CHECK_GE(lhs, rhs) DOCTEST_BINARY_ASSERT(DT_CHECK_GE, lhs, rhs, ge) #define DOCTEST_REQUIRE_GE(lhs, rhs) DOCTEST_BINARY_ASSERT(DT_REQUIRE_GE, lhs, rhs, ge) #define DOCTEST_WARN_LE(lhs, rhs) DOCTEST_BINARY_ASSERT(DT_WARN_LE, lhs, rhs, le) #define DOCTEST_CHECK_LE(lhs, rhs) DOCTEST_BINARY_ASSERT(DT_CHECK_LE, lhs, rhs, le) #define DOCTEST_REQUIRE_LE(lhs, rhs) DOCTEST_BINARY_ASSERT(DT_REQUIRE_LE, lhs, rhs, le) #define DOCTEST_WARN_UNARY(v) DOCTEST_UNARY_ASSERT(DT_WARN_UNARY, v) #define DOCTEST_CHECK_UNARY(v) DOCTEST_UNARY_ASSERT(DT_CHECK_UNARY, v) #define DOCTEST_REQUIRE_UNARY(v) DOCTEST_UNARY_ASSERT(DT_REQUIRE_UNARY, v) #define DOCTEST_WARN_UNARY_FALSE(v) DOCTEST_UNARY_ASSERT(DT_WARN_UNARY_FALSE, v) #define DOCTEST_CHECK_UNARY_FALSE(v) DOCTEST_UNARY_ASSERT(DT_CHECK_UNARY_FALSE, v) #define DOCTEST_REQUIRE_UNARY_FALSE(v) DOCTEST_UNARY_ASSERT(DT_REQUIRE_UNARY_FALSE, v) #ifndef DOCTEST_CONFIG_SUPER_FAST_ASSERTS #define DOCTEST_FAST_BINARY_ASSERT(assert_type, lhs, rhs, comparison) \ do { \ int _DOCTEST_FAST_RES = doctest::detail::fast_binary_assert< \ doctest::detail::binaryAssertComparison::comparison>( \ doctest::detail::assertType::assert_type, __FILE__, __LINE__, #lhs, #rhs, lhs, \ rhs); \ if(_DOCTEST_FAST_RES & doctest::detail::assertAction::dbgbreak) \ DOCTEST_BREAK_INTO_DEBUGGER(); \ doctest::detail::fastAssertThrowIfFlagSet(_DOCTEST_FAST_RES); \ } while(doctest::detail::always_false()) #define DOCTEST_FAST_UNARY_ASSERT(assert_type, val) \ do { \ int _DOCTEST_FAST_RES = doctest::detail::fast_unary_assert( \ doctest::detail::assertType::assert_type, __FILE__, __LINE__, #val, val); \ if(_DOCTEST_FAST_RES & doctest::detail::assertAction::dbgbreak) \ DOCTEST_BREAK_INTO_DEBUGGER(); \ doctest::detail::fastAssertThrowIfFlagSet(_DOCTEST_FAST_RES); \ } while(doctest::detail::always_false()) #else // DOCTEST_CONFIG_SUPER_FAST_ASSERTS #define DOCTEST_FAST_BINARY_ASSERT(assert_type, lhs, rhs, comparison) \ doctest::detail::fast_binary_assert( \ doctest::detail::assertType::assert_type, __FILE__, __LINE__, #lhs, #rhs, lhs, rhs) #define DOCTEST_FAST_UNARY_ASSERT(assert_type, val) \ doctest::detail::fast_unary_assert(doctest::detail::assertType::assert_type, __FILE__, \ __LINE__, #val, val) #endif // DOCTEST_CONFIG_SUPER_FAST_ASSERTS #define DOCTEST_FAST_WARN_EQ(l, r) DOCTEST_FAST_BINARY_ASSERT(DT_FAST_WARN_EQ, l, r, eq) #define DOCTEST_FAST_CHECK_EQ(l, r) DOCTEST_FAST_BINARY_ASSERT(DT_FAST_CHECK_EQ, l, r, eq) #define DOCTEST_FAST_REQUIRE_EQ(l, r) DOCTEST_FAST_BINARY_ASSERT(DT_FAST_REQUIRE_EQ, l, r, eq) #define DOCTEST_FAST_WARN_NE(l, r) DOCTEST_FAST_BINARY_ASSERT(DT_FAST_WARN_NE, l, r, ne) #define DOCTEST_FAST_CHECK_NE(l, r) DOCTEST_FAST_BINARY_ASSERT(DT_FAST_CHECK_NE, l, r, ne) #define DOCTEST_FAST_REQUIRE_NE(l, r) DOCTEST_FAST_BINARY_ASSERT(DT_FAST_REQUIRE_NE, l, r, ne) #define DOCTEST_FAST_WARN_GT(l, r) DOCTEST_FAST_BINARY_ASSERT(DT_FAST_WARN_GT, l, r, gt) #define DOCTEST_FAST_CHECK_GT(l, r) DOCTEST_FAST_BINARY_ASSERT(DT_FAST_CHECK_GT, l, r, gt) #define DOCTEST_FAST_REQUIRE_GT(l, r) DOCTEST_FAST_BINARY_ASSERT(DT_FAST_REQUIRE_GT, l, r, gt) #define DOCTEST_FAST_WARN_LT(l, r) DOCTEST_FAST_BINARY_ASSERT(DT_FAST_WARN_LT, l, r, lt) #define DOCTEST_FAST_CHECK_LT(l, r) DOCTEST_FAST_BINARY_ASSERT(DT_FAST_CHECK_LT, l, r, lt) #define DOCTEST_FAST_REQUIRE_LT(l, r) DOCTEST_FAST_BINARY_ASSERT(DT_FAST_REQUIRE_LT, l, r, lt) #define DOCTEST_FAST_WARN_GE(l, r) DOCTEST_FAST_BINARY_ASSERT(DT_FAST_WARN_GE, l, r, ge) #define DOCTEST_FAST_CHECK_GE(l, r) DOCTEST_FAST_BINARY_ASSERT(DT_FAST_CHECK_GE, l, r, ge) #define DOCTEST_FAST_REQUIRE_GE(l, r) DOCTEST_FAST_BINARY_ASSERT(DT_FAST_REQUIRE_GE, l, r, ge) #define DOCTEST_FAST_WARN_LE(l, r) DOCTEST_FAST_BINARY_ASSERT(DT_FAST_WARN_LE, l, r, le) #define DOCTEST_FAST_CHECK_LE(l, r) DOCTEST_FAST_BINARY_ASSERT(DT_FAST_CHECK_LE, l, r, le) #define DOCTEST_FAST_REQUIRE_LE(l, r) DOCTEST_FAST_BINARY_ASSERT(DT_FAST_REQUIRE_LE, l, r, le) #define DOCTEST_FAST_WARN_UNARY(v) DOCTEST_FAST_UNARY_ASSERT(DT_FAST_WARN_UNARY, v) #define DOCTEST_FAST_CHECK_UNARY(v) DOCTEST_FAST_UNARY_ASSERT(DT_FAST_CHECK_UNARY, v) #define DOCTEST_FAST_REQUIRE_UNARY(v) DOCTEST_FAST_UNARY_ASSERT(DT_FAST_REQUIRE_UNARY, v) #define DOCTEST_FAST_WARN_UNARY_FALSE(v) DOCTEST_FAST_UNARY_ASSERT(DT_FAST_WARN_UNARY_FALSE, v) #define DOCTEST_FAST_CHECK_UNARY_FALSE(v) DOCTEST_FAST_UNARY_ASSERT(DT_FAST_CHECK_UNARY_FALSE, v) #define DOCTEST_FAST_REQUIRE_UNARY_FALSE(v) \ DOCTEST_FAST_UNARY_ASSERT(DT_FAST_REQUIRE_UNARY_FALSE, v) // OMGOMGOMG trqbva da napravq teq da sa no-op - a ne prosto da ne gi undef-vam #ifdef DOCTEST_CONFIG_NO_EXCEPTIONS #undef DOCTEST_WARN_THROWS #undef DOCTEST_CHECK_THROWS #undef DOCTEST_REQUIRE_THROWS #undef DOCTEST_WARN_THROWS_AS #undef DOCTEST_CHECK_THROWS_AS #undef DOCTEST_REQUIRE_THROWS_AS #undef DOCTEST_WARN_NOTHROW #undef DOCTEST_CHECK_NOTHROW #undef DOCTEST_REQUIRE_NOTHROW #ifdef DOCTEST_CONFIG_NO_EXCEPTIONS_BUT_WITH_ALL_ASSERTS #define DOCTEST_WARN_THROWS(expr) ((void)0) #define DOCTEST_WARN_THROWS_AS(expr, ex) ((void)0) #define DOCTEST_WARN_NOTHROW(expr) ((void)0) #define DOCTEST_CHECK_THROWS(expr) ((void)0) #define DOCTEST_CHECK_THROWS_AS(expr, ex) ((void)0) #define DOCTEST_CHECK_NOTHROW(expr) ((void)0) #define DOCTEST_REQUIRE_THROWS(expr) ((void)0) #define DOCTEST_REQUIRE_THROWS_AS(expr, ex) ((void)0) #define DOCTEST_REQUIRE_NOTHROW(expr) ((void)0) #else // DOCTEST_CONFIG_NO_EXCEPTIONS_BUT_WITH_ALL_ASSERTS #undef DOCTEST_REQUIRE #undef DOCTEST_REQUIRE_FALSE #undef DOCTEST_REQUIRE_EQ #undef DOCTEST_REQUIRE_NE #undef DOCTEST_REQUIRE_GT #undef DOCTEST_REQUIRE_LT #undef DOCTEST_REQUIRE_GE #undef DOCTEST_REQUIRE_LE #undef DOCTEST_REQUIRE_UNARY #undef DOCTEST_REQUIRE_UNARY_FALSE #undef DOCTEST_FAST_REQUIRE_EQ #undef DOCTEST_FAST_REQUIRE_NE #undef DOCTEST_FAST_REQUIRE_GT #undef DOCTEST_FAST_REQUIRE_LT #undef DOCTEST_FAST_REQUIRE_GE #undef DOCTEST_FAST_REQUIRE_LE #undef DOCTEST_FAST_REQUIRE_UNARY #undef DOCTEST_FAST_REQUIRE_UNARY_FALSE #endif // DOCTEST_CONFIG_NO_EXCEPTIONS_BUT_WITH_ALL_ASSERTS #endif // DOCTEST_CONFIG_NO_EXCEPTIONS // ================================================================================================= // == WHAT FOLLOWS IS VERSIONS OF THE MACROS THAT DO NOT DO ANY REGISTERING! == // == THIS CAN BE ENABLED BY DEFINING DOCTEST_CONFIG_DISABLE GLOBALLY! == // ================================================================================================= #else // DOCTEST_CONFIG_DISABLE #define DOCTEST_IMPLEMENT_FIXTURE(der, base, func, name) \ namespace \ { \ template \ struct der : base \ { void f(); }; \ } \ template \ inline void der::f() #define DOCTEST_CREATE_AND_REGISTER_FUNCTION(f, name) \ template \ static inline void f() // for registering tests #define DOCTEST_TEST_CASE(name) \ DOCTEST_CREATE_AND_REGISTER_FUNCTION(DOCTEST_ANONYMOUS(_DOCTEST_ANON_FUNC_), name) // for registering tests with a fixture #define DOCTEST_TEST_CASE_FIXTURE(x, name) \ DOCTEST_IMPLEMENT_FIXTURE(DOCTEST_ANONYMOUS(_DOCTEST_ANON_CLASS_), x, \ DOCTEST_ANONYMOUS(_DOCTEST_ANON_FUNC_), name) // for subcases #define DOCTEST_SUBCASE(name) // for starting a testsuite block #define DOCTEST_TEST_SUITE(name) typedef int DOCTEST_ANONYMOUS(_DOCTEST_ANON_FOR_SEMICOLON_) // for ending a testsuite block #define DOCTEST_TEST_SUITE_END typedef int DOCTEST_ANONYMOUS(_DOCTEST_ANON_FOR_SEMICOLON_) #define DOCTEST_WARN(expr) ((void)0) #define DOCTEST_WARN_FALSE(expr) ((void)0) #define DOCTEST_WARN_THROWS(expr) ((void)0) #define DOCTEST_WARN_THROWS_AS(expr, ex) ((void)0) #define DOCTEST_WARN_NOTHROW(expr) ((void)0) #define DOCTEST_CHECK(expr) ((void)0) #define DOCTEST_CHECK_FALSE(expr) ((void)0) #define DOCTEST_CHECK_THROWS(expr) ((void)0) #define DOCTEST_CHECK_THROWS_AS(expr, ex) ((void)0) #define DOCTEST_CHECK_NOTHROW(expr) ((void)0) #define DOCTEST_REQUIRE(expr) ((void)0) #define DOCTEST_REQUIRE_FALSE(expr) ((void)0) #define DOCTEST_REQUIRE_THROWS(expr) ((void)0) #define DOCTEST_REQUIRE_THROWS_AS(expr, ex) ((void)0) #define DOCTEST_REQUIRE_NOTHROW(expr) ((void)0) #define DOCTEST_WARN_EQ(lhs, rhs) ((void)0) #define DOCTEST_CHECK_EQ(lhs, rhs) ((void)0) #define DOCTEST_REQUIRE_EQ(lhs, rhs) ((void)0) #define DOCTEST_WARN_NE(lhs, rhs) ((void)0) #define DOCTEST_CHECK_NE(lhs, rhs) ((void)0) #define DOCTEST_REQUIRE_NE(lhs, rhs) ((void)0) #define DOCTEST_WARN_GT(lhs, rhs) ((void)0) #define DOCTEST_CHECK_GT(lhs, rhs) ((void)0) #define DOCTEST_REQUIRE_GT(lhs, rhs) ((void)0) #define DOCTEST_WARN_LT(lhs, rhs) ((void)0) #define DOCTEST_CHECK_LT(lhs, rhs) ((void)0) #define DOCTEST_REQUIRE_LT(lhs, rhs) ((void)0) #define DOCTEST_WARN_GE(lhs, rhs) ((void)0) #define DOCTEST_CHECK_GE(lhs, rhs) ((void)0) #define DOCTEST_REQUIRE_GE(lhs, rhs) ((void)0) #define DOCTEST_WARN_LE(lhs, rhs) ((void)0) #define DOCTEST_CHECK_LE(lhs, rhs) ((void)0) #define DOCTEST_REQUIRE_LE(lhs, rhs) ((void)0) #define DOCTEST_WARN_UNARY(val) ((void)0) #define DOCTEST_CHECK_UNARY(val) ((void)0) #define DOCTEST_REQUIRE_UNARY(val) ((void)0) #define DOCTEST_WARN_UNARY_FALSE(val) ((void)0) #define DOCTEST_CHECK_UNARY_FALSE(val) ((void)0) #define DOCTEST_REQUIRE_UNARY_FALSE(val) ((void)0) #define DOCTEST_FAST_WARN_EQ(lhs, rhs) ((void)0) #define DOCTEST_FAST_CHECK_EQ(lhs, rhs) ((void)0) #define DOCTEST_FAST_REQUIRE_EQ(lhs, rhs) ((void)0) #define DOCTEST_FAST_WARN_NE(lhs, rhs) ((void)0) #define DOCTEST_FAST_CHECK_NE(lhs, rhs) ((void)0) #define DOCTEST_FAST_REQUIRE_NE(lhs, rhs) ((void)0) #define DOCTEST_FAST_WARN_GT(lhs, rhs) ((void)0) #define DOCTEST_FAST_CHECK_GT(lhs, rhs) ((void)0) #define DOCTEST_FAST_REQUIRE_GT(lhs, rhs) ((void)0) #define DOCTEST_FAST_WARN_LT(lhs, rhs) ((void)0) #define DOCTEST_FAST_CHECK_LT(lhs, rhs) ((void)0) #define DOCTEST_FAST_REQUIRE_LT(lhs, rhs) ((void)0) #define DOCTEST_FAST_WARN_GE(lhs, rhs) ((void)0) #define DOCTEST_FAST_CHECK_GE(lhs, rhs) ((void)0) #define DOCTEST_FAST_REQUIRE_GE(lhs, rhs) ((void)0) #define DOCTEST_FAST_WARN_LE(lhs, rhs) ((void)0) #define DOCTEST_FAST_CHECK_LE(lhs, rhs) ((void)0) #define DOCTEST_FAST_REQUIRE_LE(lhs, rhs) ((void)0) #define DOCTEST_FAST_WARN_UNARY(val) ((void)0) #define DOCTEST_FAST_CHECK_UNARY(val) ((void)0) #define DOCTEST_FAST_REQUIRE_UNARY(val) ((void)0) #define DOCTEST_FAST_WARN_UNARY_FALSE(val) ((void)0) #define DOCTEST_FAST_CHECK_UNARY_FALSE(val) ((void)0) #define DOCTEST_FAST_REQUIRE_UNARY_FALSE(val) ((void)0) #endif // DOCTEST_CONFIG_DISABLE // BDD style macros // clang-format off #define DOCTEST_SCENARIO(name) TEST_CASE(" Scenario: " name) #define DOCTEST_GIVEN(name) SUBCASE(" Given: " name) #define DOCTEST_WHEN(name) SUBCASE(" When: " name) #define DOCTEST_AND_WHEN(name) SUBCASE("And when: " name) #define DOCTEST_THEN(name) SUBCASE(" Then: " name) #define DOCTEST_AND_THEN(name) SUBCASE(" And: " name) // clang-format on // == SHORT VERSIONS OF THE MACROS #if !defined(DOCTEST_CONFIG_NO_SHORT_MACRO_NAMES) #define TEST_CASE DOCTEST_TEST_CASE #define TEST_CASE_FIXTURE DOCTEST_TEST_CASE_FIXTURE #define SUBCASE DOCTEST_SUBCASE #define TEST_SUITE DOCTEST_TEST_SUITE #define TEST_SUITE_END DOCTEST_TEST_SUITE_END #define WARN DOCTEST_WARN #define WARN_FALSE DOCTEST_WARN_FALSE #define WARN_THROWS DOCTEST_WARN_THROWS #define WARN_THROWS_AS DOCTEST_WARN_THROWS_AS #define WARN_NOTHROW DOCTEST_WARN_NOTHROW #define CHECK DOCTEST_CHECK #define CHECK_FALSE DOCTEST_CHECK_FALSE #define CHECK_THROWS DOCTEST_CHECK_THROWS #define CHECK_THROWS_AS DOCTEST_CHECK_THROWS_AS #define CHECK_NOTHROW DOCTEST_CHECK_NOTHROW #define REQUIRE DOCTEST_REQUIRE #define REQUIRE_FALSE DOCTEST_REQUIRE_FALSE #define REQUIRE_THROWS DOCTEST_REQUIRE_THROWS #define REQUIRE_THROWS_AS DOCTEST_REQUIRE_THROWS_AS #define REQUIRE_NOTHROW DOCTEST_REQUIRE_NOTHROW #define SCENARIO DOCTEST_SCENARIO #define GIVEN DOCTEST_GIVEN #define WHEN DOCTEST_WHEN #define AND_WHEN DOCTEST_AND_WHEN #define THEN DOCTEST_THEN #define AND_THEN DOCTEST_AND_THEN #define WARN_EQ DOCTEST_WARN_EQ #define CHECK_EQ DOCTEST_CHECK_EQ #define REQUIRE_EQ DOCTEST_REQUIRE_EQ #define WARN_NE DOCTEST_WARN_NE #define CHECK_NE DOCTEST_CHECK_NE #define REQUIRE_NE DOCTEST_REQUIRE_NE #define WARN_GT DOCTEST_WARN_GT #define CHECK_GT DOCTEST_CHECK_GT #define REQUIRE_GT DOCTEST_REQUIRE_GT #define WARN_LT DOCTEST_WARN_LT #define CHECK_LT DOCTEST_CHECK_LT #define REQUIRE_LT DOCTEST_REQUIRE_LT #define WARN_GE DOCTEST_WARN_GE #define CHECK_GE DOCTEST_CHECK_GE #define REQUIRE_GE DOCTEST_REQUIRE_GE #define WARN_LE DOCTEST_WARN_LE #define CHECK_LE DOCTEST_CHECK_LE #define REQUIRE_LE DOCTEST_REQUIRE_LE #define WARN_UNARY DOCTEST_WARN_UNARY #define CHECK_UNARY DOCTEST_CHECK_UNARY #define REQUIRE_UNARY DOCTEST_REQUIRE_UNARY #define WARN_UNARY_FALSE DOCTEST_WARN_UNARY_FALSE #define CHECK_UNARY_FALSE DOCTEST_CHECK_UNARY_FALSE #define REQUIRE_UNARY_FALSE DOCTEST_REQUIRE_UNARY_FALSE #define FAST_WARN_EQ DOCTEST_FAST_WARN_EQ #define FAST_CHECK_EQ DOCTEST_FAST_CHECK_EQ #define FAST_REQUIRE_EQ DOCTEST_FAST_REQUIRE_EQ #define FAST_WARN_NE DOCTEST_FAST_WARN_NE #define FAST_CHECK_NE DOCTEST_FAST_CHECK_NE #define FAST_REQUIRE_NE DOCTEST_FAST_REQUIRE_NE #define FAST_WARN_GT DOCTEST_FAST_WARN_GT #define FAST_CHECK_GT DOCTEST_FAST_CHECK_GT #define FAST_REQUIRE_GT DOCTEST_FAST_REQUIRE_GT #define FAST_WARN_LT DOCTEST_FAST_WARN_LT #define FAST_CHECK_LT DOCTEST_FAST_CHECK_LT #define FAST_REQUIRE_LT DOCTEST_FAST_REQUIRE_LT #define FAST_WARN_GE DOCTEST_FAST_WARN_GE #define FAST_CHECK_GE DOCTEST_FAST_CHECK_GE #define FAST_REQUIRE_GE DOCTEST_FAST_REQUIRE_GE #define FAST_WARN_LE DOCTEST_FAST_WARN_LE #define FAST_CHECK_LE DOCTEST_FAST_CHECK_LE #define FAST_REQUIRE_LE DOCTEST_FAST_REQUIRE_LE #define FAST_WARN_UNARY DOCTEST_FAST_WARN_UNARY #define FAST_CHECK_UNARY DOCTEST_FAST_CHECK_UNARY #define FAST_REQUIRE_UNARY DOCTEST_FAST_REQUIRE_UNARY #define FAST_WARN_UNARY_FALSE DOCTEST_FAST_WARN_UNARY_FALSE #define FAST_CHECK_UNARY_FALSE DOCTEST_FAST_CHECK_UNARY_FALSE #define FAST_REQUIRE_UNARY_FALSE DOCTEST_FAST_REQUIRE_UNARY_FALSE #endif // DOCTEST_CONFIG_NO_SHORT_MACRO_NAMES // this is here to clear the 'current test suite' for the current translation unit - at the top DOCTEST_TEST_SUITE_END(); #endif // DOCTEST_LIBRARY_INCLUDED #if defined(__clang__) #pragma clang diagnostic pop #endif // __clang__ #if defined(__GNUC__) && !defined(__clang__) #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 6) #pragma GCC diagnostic pop #endif // > gcc 4.6 #endif // __GNUC__ #ifdef _MSC_VER #pragma warning(pop) #endif // _MSC_VER #ifndef DOCTEST_SINGLE_HEADER #define DOCTEST_SINGLE_HEADER #endif // DOCTEST_SINGLE_HEADER #if defined(__clang__) #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wunknown-pragmas" #pragma clang diagnostic ignored "-Wpadded" #pragma clang diagnostic ignored "-Wglobal-constructors" #pragma clang diagnostic ignored "-Wexit-time-destructors" #pragma clang diagnostic ignored "-Wmissing-prototypes" #pragma clang diagnostic ignored "-Wsign-conversion" #pragma clang diagnostic ignored "-Wshorten-64-to-32" #pragma clang diagnostic ignored "-Wmissing-variable-declarations" #pragma clang diagnostic ignored "-Wswitch" #pragma clang diagnostic ignored "-Wswitch-enum" #pragma clang diagnostic ignored "-Wcovered-switch-default" #pragma clang diagnostic ignored "-Wmissing-noreturn" #pragma clang diagnostic ignored "-Wunused-local-typedef" #endif // __clang__ #if defined(__GNUC__) && !defined(__clang__) #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 6) #pragma GCC diagnostic push #endif // > gcc 4.6 #pragma GCC diagnostic ignored "-Wunknown-pragmas" #pragma GCC diagnostic ignored "-Wconversion" #pragma GCC diagnostic ignored "-Weffc++" #pragma GCC diagnostic ignored "-Wsign-conversion" #pragma GCC diagnostic ignored "-Wstrict-overflow" #pragma GCC diagnostic ignored "-Wmissing-declarations" #pragma GCC diagnostic ignored "-Winline" #pragma GCC diagnostic ignored "-Wswitch" #pragma GCC diagnostic ignored "-Wswitch-enum" #pragma GCC diagnostic ignored "-Wswitch-default" #pragma GCC diagnostic ignored "-Wunsafe-loop-optimizations" #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 6) #pragma GCC diagnostic ignored "-Wzero-as-null-pointer-constant" #endif // > gcc 4.6 #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 7) #pragma GCC diagnostic ignored "-Wunused-local-typedefs" #endif // > gcc 4.7 #if __GNUC__ > 5 || (__GNUC__ == 5 && __GNUC_MINOR__ > 3) #pragma GCC diagnostic ignored "-Wuseless-cast" #endif // > gcc 5.3 #endif // __GNUC__ #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable : 4996) // The compiler encountered a deprecated declaration #pragma warning(disable : 4267) // 'var' : conversion from 'size_t' to 'type', possible loss of data #pragma warning(disable : 4706) // assignment within conditional expression #pragma warning(disable : 4512) // 'class' : assignment operator could not be generated #pragma warning(disable : 4127) // conditional expression is constant #pragma warning(disable : 4530) // C++ exception handler used, but unwind semantics are not enabled #pragma warning(disable : 4577) // 'noexcept' used with no exception handling mode specified #endif // _MSC_VER #if defined(DOCTEST_CONFIG_IMPLEMENT) || defined(DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN) || \ !defined(DOCTEST_SINGLE_HEADER) #ifndef DOCTEST_LIBRARY_IMPLEMENTATION #define DOCTEST_LIBRARY_IMPLEMENTATION #ifndef DOCTEST_SINGLE_HEADER #include "doctest_fwd.h" #endif // DOCTEST_SINGLE_HEADER #if defined(__clang__) && defined(DOCTEST_NO_CPP11_COMPAT) #pragma clang diagnostic ignored "-Wc++98-compat" #pragma clang diagnostic ignored "-Wc++98-compat-pedantic" #endif // __clang__ && DOCTEST_NO_CPP11_COMPAT // snprintf() not in the C++98 standard #ifdef _MSC_VER #define DOCTEST_SNPRINTF _snprintf #else #define DOCTEST_SNPRINTF snprintf #endif #define DOCTEST_LOG_START() \ do { \ if(!DOCTEST_GCS().hasLoggedCurrentTestStart) { \ doctest::detail::logTestStart(DOCTEST_GCS().currentTest->m_name, \ DOCTEST_GCS().currentTest->m_file, \ DOCTEST_GCS().currentTest->m_line); \ DOCTEST_GCS().hasLoggedCurrentTestStart = true; \ } \ } while(doctest::detail::always_false()) // required includes - will go only in one translation unit! #include #include // borland (Embarcadero) compiler requires math.h and not cmath - https://github.com/onqtam/doctest/pull/37 #ifdef __BORLANDC__ #include #endif // __BORLANDC__ #include #include #include #include #include #include #include #include #include #include namespace doctest { namespace detail { // not using std::strlen() because of valgrind errors when optimizations are turned on // 'Invalid read of size 4' when the test suite len (with '\0') is not a multiple of 4 // for details see http://stackoverflow.com/questions/35671155 size_t my_strlen(const char* in) { const char* temp = in; while(temp && *temp) ++temp; return temp - in; } template T my_max(const T& lhs, const T& rhs) { return lhs > rhs ? lhs : rhs; } // case insensitive strcmp int stricmp(char const* a, char const* b) { for(;; a++, b++) { int d = tolower(*a) - tolower(*b); if(d != 0 || !*a) return d; } } template String fpToString(T value, int precision) { std::ostringstream oss; oss << std::setprecision(precision) << std::fixed << value; std::string d = oss.str(); size_t i = d.find_last_not_of('0'); if(i != std::string::npos && i != d.size() - 1) { if(d[i] == '.') i++; d = d.substr(0, i + 1); } return d.c_str(); } struct Endianness { enum Arch { Big, Little }; static Arch which() { union _ { int asInt; char asChar[sizeof(int)]; } u; u.asInt = 1; return (u.asChar[sizeof(int) - 1] == 1) ? Big : Little; } }; String rawMemoryToString(const void* object, unsigned size) { // Reverse order for little endian architectures int i = 0, end = static_cast(size), inc = 1; if(Endianness::which() == Endianness::Little) { i = end - 1; end = inc = -1; } unsigned char const* bytes = static_cast(object); std::ostringstream os; os << "0x" << std::setfill('0') << std::hex; for(; i != end; i += inc) os << std::setw(2) << static_cast(bytes[i]); return os.str().c_str(); } std::ostream* createStream() { return new std::ostringstream(); } String getStreamResult(std::ostream* in) { return static_cast(in)->str().c_str(); } void freeStream(std::ostream* in) { delete in; } #ifndef DOCTEST_CONFIG_DISABLE // this holds both parameters for the command line and runtime data for tests struct ContextState : TestAccessibleContextState { // == parameters from the command line std::vector > filters; String order_by; // how tests should be ordered unsigned rand_seed; // the seed for rand ordering unsigned first; // the first (matching) test to be executed unsigned last; // the last (matching) test to be executed int abort_after; // stop tests after this many failed assertions bool case_sensitive; // if filtering should be case sensitive bool exit; // if the program should be exited after the tests are ran/whatever bool no_exitcode; // if the framework should return 0 as the exitcode bool no_run; // to not run the tests at all (can be done with an "*" exclude) bool no_version; // to not print the version of the framework bool no_colors; // if output to the console should be colorized bool no_path_in_filenames; // if the path to files should be removed from the output bool help; // to print the help bool version; // to print the version bool count; // if only the count of matching tests is to be retreived bool list_test_cases; // to list all tests matching the filters bool list_test_suites; // to list all suites matching the filters // == data for the tests being ran int numAssertions; int numFailedAssertions; int numFailedAssertionsForCurrentTestcase; // stuff for subcases std::set subcasesPassed; std::set subcasesEnteredLevels; std::vector subcasesStack; int subcasesCurrentLevel; bool subcasesHasSkipped; void resetRunData() { numAssertions = 0; numFailedAssertions = 0; } ContextState() : filters(6) // 6 different filters total { resetRunData(); } }; ContextState*& getContextState(); #endif // DOCTEST_CONFIG_DISABLE } // namespace detail String::String(const char* in) : m_str(static_cast(malloc(detail::my_strlen(in) + 1))) { if(in) strcpy(m_str, in); else m_str[0] = '\0'; } String::String(const String& other) : m_str(0) { copy(other); } void String::copy(const String& other) { if(m_str) free(m_str); m_str = static_cast(malloc(detail::my_strlen(other.m_str) + 1)); strcpy(m_str, other.m_str); } String::~String() { free(m_str); } String& String::operator=(const String& other) { if(this != &other) copy(other); return *this; } String String::operator+(const String& other) const { return String(m_str) += other; } String& String::operator+=(const String& other) { using namespace detail; if(other.m_str != 0) { char* newStr = static_cast(malloc(my_strlen(m_str) + my_strlen(other.m_str) + 1)); strcpy(newStr, m_str); strcpy(newStr + my_strlen(m_str), other.m_str); free(m_str); m_str = newStr; } return *this; } unsigned String::size() const { return m_str ? detail::my_strlen(m_str) : 0; } unsigned String::length() const { return size(); } int String::compare(const char* other, bool no_case) const { if(no_case) return detail::stricmp(m_str, other); return strcmp(m_str, other); } int String::compare(const String& other, bool no_case) const { if(no_case) return detail::stricmp(m_str, other.m_str); return strcmp(m_str, other.m_str); } std::ostream& operator<<(std::ostream& stream, const String& in) { stream << in.c_str(); return stream; } Approx::Approx(double value) : m_epsilon(static_cast(std::numeric_limits::epsilon()) * 100) , m_scale(1.0) , m_value(value) {} bool operator==(double lhs, Approx const& rhs) { // Thanks to Richard Harris for his help refining this formula return fabs(lhs - rhs.m_value) < rhs.m_epsilon * (rhs.m_scale + detail::my_max(fabs(lhs), fabs(rhs.m_value))); } String Approx::toString() const { return String("Approx( ") + doctest::toString(m_value) + " )"; } #ifdef DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING String toString(char* in) { return toString(static_cast(in)); } String toString(const char* in) { return String("\"") + (in ? in : "{null string}") + "\""; } #endif // DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING String toString(bool in) { return in ? "true" : "false"; } String toString(float in) { return detail::fpToString(in, 5) + "f"; } String toString(double in) { return detail::fpToString(in, 10); } String toString(double long in) { return detail::fpToString(in, 15); } String toString(char in) { char buf[64]; sprintf(buf, "%d", in); return buf; } String toString(char unsigned in) { char buf[64]; sprintf(buf, "%ud", in); return buf; } String toString(int short in) { char buf[64]; sprintf(buf, "%d", in); return buf; } String toString(int short unsigned in) { char buf[64]; sprintf(buf, "%u", in); return buf; } String toString(int in) { char buf[64]; sprintf(buf, "%d", in); return buf; } String toString(int unsigned in) { char buf[64]; sprintf(buf, "%u", in); return buf; } String toString(int long in) { char buf[64]; sprintf(buf, "%ld", in); return buf; } String toString(int long unsigned in) { char buf[64]; sprintf(buf, "%lu", in); return buf; } #ifdef DOCTEST_CONFIG_WITH_LONG_LONG String toString(int long long in) { char buf[64]; sprintf(buf, "%lld", in); return buf; } String toString(int long long unsigned in) { char buf[64]; sprintf(buf, "%llu", in); return buf; } #endif // DOCTEST_CONFIG_WITH_LONG_LONG #ifdef DOCTEST_CONFIG_WITH_NULLPTR String toString(std::nullptr_t) { return "nullptr"; } #endif // DOCTEST_CONFIG_WITH_NULLPTR } // namespace doctest #if defined(DOCTEST_CONFIG_DISABLE) namespace doctest { Context::Context(int, const char* const*) {} Context::~Context() {} void Context::applyCommandLine(int, const char* const*) {} void Context::addFilter(const char*, const char*) {} void Context::clearFilters() {} void Context::setOption(const char*, int) {} void Context::setOption(const char*, const char*) {} bool Context::shouldExit() { return false; } int Context::run() { return 0; } } // namespace doctest #else // DOCTEST_CONFIG_DISABLE #if !defined(DOCTEST_CONFIG_COLORS_NONE) #if !defined(DOCTEST_CONFIG_COLORS_WINDOWS) && !defined(DOCTEST_CONFIG_COLORS_ANSI) #ifdef DOCTEST_PLATFORM_WINDOWS #define DOCTEST_CONFIG_COLORS_WINDOWS #else // linux #define DOCTEST_CONFIG_COLORS_ANSI #endif // platform #endif // DOCTEST_CONFIG_COLORS_WINDOWS && DOCTEST_CONFIG_COLORS_ANSI #endif // DOCTEST_CONFIG_COLORS_NONE #define DOCTEST_PRINTF_COLORED(buffer, color) \ do { \ if(buffer[0] != 0) { \ doctest::detail::Color col(color); \ printf("%s", buffer); \ } \ } while(doctest::detail::always_false()) // the buffer size used for snprintf() calls #if !defined(DOCTEST_SNPRINTF_BUFFER_LENGTH) #define DOCTEST_SNPRINTF_BUFFER_LENGTH 1024 #endif // DOCTEST_SNPRINTF_BUFFER_LENGTH #if defined(_MSC_VER) || defined(__MINGW32__) #if defined(_MSC_VER) && _MSC_VER >= 1700 #define DOCTEST_WINDOWS_SAL_IN_OPT _In_opt_ #else // _MSC_VER #define DOCTEST_WINDOWS_SAL_IN_OPT #endif // _MSC_VER extern "C" __declspec(dllimport) void __stdcall OutputDebugStringA( DOCTEST_WINDOWS_SAL_IN_OPT const char*); extern "C" __declspec(dllimport) int __stdcall IsDebuggerPresent(); #endif // _MSC_VER || __MINGW32__ #ifdef DOCTEST_CONFIG_COLORS_ANSI #include #endif // DOCTEST_CONFIG_COLORS_ANSI #ifdef DOCTEST_CONFIG_COLORS_WINDOWS // defines for a leaner windows.h #ifndef WIN32_MEAN_AND_LEAN #define WIN32_MEAN_AND_LEAN #endif // WIN32_MEAN_AND_LEAN #ifndef VC_EXTRA_LEAN #define VC_EXTRA_LEAN #endif // VC_EXTRA_LEAN #ifndef NOMINMAX #define NOMINMAX #endif // NOMINMAX // not sure what AfxWin.h is for - here I do what Catch does #ifdef __AFXDLL #include #else #include #endif #endif // DOCTEST_CONFIG_COLORS_WINDOWS namespace doctest { namespace detail { bool TestData::operator<(const TestData& other) const { if(m_line != other.m_line) return m_line < other.m_line; return strcmp(m_file, other.m_file) < 0; } const char* getAssertString(assertType::Enum val) { switch(val) { // clang-format off case assertType::DT_WARN : return "WARN"; case assertType::DT_CHECK : return "CHECK"; case assertType::DT_REQUIRE : return "REQUIRE"; case assertType::DT_WARN_FALSE : return "WARN_FALSE"; case assertType::DT_CHECK_FALSE : return "CHECK_FALSE"; case assertType::DT_REQUIRE_FALSE : return "REQUIRE_FALSE"; case assertType::DT_WARN_THROWS : return "WARN_THROWS"; case assertType::DT_CHECK_THROWS : return "CHECK_THROWS"; case assertType::DT_REQUIRE_THROWS : return "REQUIRE_THROWS"; case assertType::DT_WARN_THROWS_AS : return "WARN_THROWS_AS"; case assertType::DT_CHECK_THROWS_AS : return "CHECK_THROWS_AS"; case assertType::DT_REQUIRE_THROWS_AS : return "REQUIRE_THROWS_AS"; case assertType::DT_WARN_NOTHROW : return "WARN_NOTHROW"; case assertType::DT_CHECK_NOTHROW : return "CHECK_NOTHROW"; case assertType::DT_REQUIRE_NOTHROW : return "REQUIRE_NOTHROW"; case assertType::DT_WARN_EQ : return "WARN_EQ"; case assertType::DT_CHECK_EQ : return "CHECK_EQ"; case assertType::DT_REQUIRE_EQ : return "REQUIRE_EQ"; case assertType::DT_WARN_NE : return "WARN_NE"; case assertType::DT_CHECK_NE : return "CHECK_NE"; case assertType::DT_REQUIRE_NE : return "REQUIRE_NE"; case assertType::DT_WARN_GT : return "WARN_GT"; case assertType::DT_CHECK_GT : return "CHECK_GT"; case assertType::DT_REQUIRE_GT : return "REQUIRE_GT"; case assertType::DT_WARN_LT : return "WARN_LT"; case assertType::DT_CHECK_LT : return "CHECK_LT"; case assertType::DT_REQUIRE_LT : return "REQUIRE_LT"; case assertType::DT_WARN_GE : return "WARN_GE"; case assertType::DT_CHECK_GE : return "CHECK_GE"; case assertType::DT_REQUIRE_GE : return "REQUIRE_GE"; case assertType::DT_WARN_LE : return "WARN_LE"; case assertType::DT_CHECK_LE : return "CHECK_LE"; case assertType::DT_REQUIRE_LE : return "REQUIRE_LE"; case assertType::DT_WARN_UNARY : return "WARN_UNARY"; case assertType::DT_CHECK_UNARY : return "CHECK_UNARY"; case assertType::DT_REQUIRE_UNARY : return "REQUIRE_UNARY"; case assertType::DT_WARN_UNARY_FALSE : return "WARN_UNARY_FALSE"; case assertType::DT_CHECK_UNARY_FALSE : return "CHECK_UNARY_FALSE"; case assertType::DT_REQUIRE_UNARY_FALSE : return "REQUIRE_UNARY_FALSE"; case assertType::DT_FAST_WARN_EQ : return "FAST_WARN_EQ"; case assertType::DT_FAST_CHECK_EQ : return "FAST_CHECK_EQ"; case assertType::DT_FAST_REQUIRE_EQ : return "FAST_REQUIRE_EQ"; case assertType::DT_FAST_WARN_NE : return "FAST_WARN_NE"; case assertType::DT_FAST_CHECK_NE : return "FAST_CHECK_NE"; case assertType::DT_FAST_REQUIRE_NE : return "FAST_REQUIRE_NE"; case assertType::DT_FAST_WARN_GT : return "FAST_WARN_GT"; case assertType::DT_FAST_CHECK_GT : return "FAST_CHECK_GT"; case assertType::DT_FAST_REQUIRE_GT : return "FAST_REQUIRE_GT"; case assertType::DT_FAST_WARN_LT : return "FAST_WARN_LT"; case assertType::DT_FAST_CHECK_LT : return "FAST_CHECK_LT"; case assertType::DT_FAST_REQUIRE_LT : return "FAST_REQUIRE_LT"; case assertType::DT_FAST_WARN_GE : return "FAST_WARN_GE"; case assertType::DT_FAST_CHECK_GE : return "FAST_CHECK_GE"; case assertType::DT_FAST_REQUIRE_GE : return "FAST_REQUIRE_GE"; case assertType::DT_FAST_WARN_LE : return "FAST_WARN_LE"; case assertType::DT_FAST_CHECK_LE : return "FAST_CHECK_LE"; case assertType::DT_FAST_REQUIRE_LE : return "FAST_REQUIRE_LE"; case assertType::DT_FAST_WARN_UNARY : return "FAST_WARN_UNARY"; case assertType::DT_FAST_CHECK_UNARY : return "FAST_CHECK_UNARY"; case assertType::DT_FAST_REQUIRE_UNARY : return "FAST_REQUIRE_UNARY"; case assertType::DT_FAST_WARN_UNARY_FALSE : return "FAST_WARN_UNARY_FALSE"; case assertType::DT_FAST_CHECK_UNARY_FALSE : return "FAST_CHECK_UNARY_FALSE"; case assertType::DT_FAST_REQUIRE_UNARY_FALSE: return "FAST_REQUIRE_UNARY_FALSE"; // clang-format on } return ""; } bool checkIfShouldThrow(assertType::Enum assert_type) { if(assert_type & assertType::is_require) return true; if((assert_type & assertType::is_check) && getContextState()->abort_after > 0) { if(getContextState()->numFailedAssertions >= getContextState()->abort_after) return true; } return false; } void fastAssertThrowIfFlagSet(int flags) { if(flags & assertAction::shouldthrow) throwException(); } void throwException() { #ifndef DOCTEST_CONFIG_NO_EXCEPTIONS throw TestFailureException(); #endif // DOCTEST_CONFIG_NO_EXCEPTIONS } bool always_false() { return false; } // lowers ascii letters char tolower(const char c) { return ((c >= 'A' && c <= 'Z') ? static_cast(c + 32) : c); } // matching of a string against a wildcard mask (case sensitivity configurable) taken from // http://www.emoticode.net/c/simple-wildcard-string-compare-globbing-function.html int wildcmp(const char* str, const char* wild, bool caseSensitive) { const char* cp = 0; const char* mp = 0; // rolled my own tolower() to not include more headers while((*str) && (*wild != '*')) { if((caseSensitive ? (*wild != *str) : (tolower(*wild) != tolower(*str))) && (*wild != '?')) { return 0; } wild++; str++; } while(*str) { if(*wild == '*') { if(!*++wild) { return 1; } mp = wild; cp = str + 1; } else if((caseSensitive ? (*wild == *str) : (tolower(*wild) == tolower(*str))) || (*wild == '?')) { wild++; str++; } else { wild = mp; str = cp++; } } while(*wild == '*') { wild++; } return !*wild; } //// C string hash function (djb2) - taken from http://www.cse.yorku.ca/~oz/hash.html //unsigned hashStr(unsigned const char* str) { // unsigned long hash = 5381; // char c; // while((c = *str++)) // hash = ((hash << 5) + hash) + c; // hash * 33 + c // return hash; //} // checks if the name matches any of the filters (and can be configured what to do when empty) int matchesAny(const char* name, std::vector filters, int matchEmpty, bool caseSensitive) { if(filters.size() == 0 && matchEmpty) return 1; for(unsigned i = 0; i < filters.size(); ++i) if(wildcmp(name, filters[i].c_str(), caseSensitive)) return 1; return 0; } // the current ContextState with which tests are being executed ContextState*& getContextState() { static ContextState* data = 0; return data; } TestAccessibleContextState* getTestsContextState() { return getContextState(); } bool SubcaseSignature::operator<(const SubcaseSignature& other) const { if(m_line != other.m_line) return m_line < other.m_line; if(strcmp(m_file, other.m_file) != 0) return strcmp(m_file, other.m_file) < 0; return strcmp(m_name, other.m_name) < 0; } Subcase::Subcase(const char* name, const char* file, int line) : m_signature(name, file, line) , m_entered(false) { ContextState* s = getContextState(); // if we have already completed it if(s->subcasesPassed.count(m_signature) != 0) return; // if a Subcase on the same level has already been entered if(s->subcasesEnteredLevels.count(s->subcasesCurrentLevel) != 0) { s->subcasesHasSkipped = true; return; } s->subcasesStack.push_back(*this); if(s->hasLoggedCurrentTestStart) logTestEnd(); s->hasLoggedCurrentTestStart = false; s->subcasesEnteredLevels.insert(s->subcasesCurrentLevel++); m_entered = true; } Subcase::Subcase(const Subcase& other) : m_signature(other.m_signature.m_name, other.m_signature.m_file, other.m_signature.m_line) , m_entered(other.m_entered) {} Subcase::~Subcase() { if(m_entered) { ContextState* s = getContextState(); s->subcasesCurrentLevel--; // only mark the subcase as passed if no subcases have been skipped if(s->subcasesHasSkipped == false) s->subcasesPassed.insert(m_signature); if(s->subcasesStack.size() > 0) s->subcasesStack.pop_back(); if(s->hasLoggedCurrentTestStart) logTestEnd(); s->hasLoggedCurrentTestStart = false; } } // for sorting tests by file/line int fileOrderComparator(const void* a, const void* b) { const TestData* lhs = *static_cast(a); const TestData* rhs = *static_cast(b); #ifdef _MSC_VER // this is needed because MSVC gives different case for drive letters // for __FILE__ when evaluated in a header and a source file int res = stricmp(lhs->m_file, rhs->m_file); #else // _MSC_VER int res = strcmp(lhs->m_file, rhs->m_file); #endif // _MSC_VER if(res != 0) return res; return static_cast(lhs->m_line - rhs->m_line); } // for sorting tests by suite/file/line int suiteOrderComparator(const void* a, const void* b) { const TestData* lhs = *static_cast(a); const TestData* rhs = *static_cast(b); int res = strcmp(lhs->m_suite, rhs->m_suite); if(res != 0) return res; return fileOrderComparator(a, b); } // for sorting tests by name/suite/file/line int nameOrderComparator(const void* a, const void* b) { const TestData* lhs = *static_cast(a); const TestData* rhs = *static_cast(b); int res = strcmp(lhs->m_name, rhs->m_name); if(res != 0) return res; return suiteOrderComparator(a, b); } // holds the current test suite const char*& getCurrentTestSuite() { static const char* data = 0; return data; } // sets the current test suite int setTestSuiteName(const char* name) { getCurrentTestSuite() = name; return 0; } // all the registered tests std::set& getRegisteredTests() { static std::set data; return data; } // used by the macros for registering tests int regTest(funcType f, unsigned line, const char* file, const char* name) { getRegisteredTests().insert(TestData(getCurrentTestSuite(), name, f, file, line)); return 0; } struct Color { enum Code { None = 0, White, Red, Green, Blue, Cyan, Yellow, Grey, Bright = 0x10, BrightRed = Bright | Red, BrightGreen = Bright | Green, LightGrey = Bright | Grey, BrightWhite = Bright | White }; Color(Code code) { use(code); } ~Color() { use(None); } void use(Code code); private: Color(Color const& other); }; void Color::use(Code #ifndef DOCTEST_CONFIG_COLORS_NONE code #endif // DOCTEST_CONFIG_COLORS_NONE ) { ContextState* p = getContextState(); if(p->no_colors) return; #ifdef DOCTEST_CONFIG_COLORS_ANSI if(isatty(STDOUT_FILENO)) { const char* col = ""; // clang-format off switch(code) { case Color::Red: col = "[0;31m"; break; case Color::Green: col = "[0;32m"; break; case Color::Blue: col = "[0;34m"; break; case Color::Cyan: col = "[0;36m"; break; case Color::Yellow: col = "[0;33m"; break; case Color::Grey: col = "[1;30m"; break; case Color::LightGrey: col = "[0;37m"; break; case Color::BrightRed: col = "[1;31m"; break; case Color::BrightGreen: col = "[1;32m"; break; case Color::BrightWhite: col = "[1;37m"; break; case Color::Bright: // invalid case Color::None: case Color::White: default: col = "[0m"; } // clang-format on printf("\033%s", col); } #endif // DOCTEST_CONFIG_COLORS_ANSI #ifdef DOCTEST_CONFIG_COLORS_WINDOWS static HANDLE stdoutHandle(GetStdHandle(STD_OUTPUT_HANDLE)); static WORD originalForegroundAttributes; static WORD originalBackgroundAttributes; static bool attrsInitted = false; if(!attrsInitted) { attrsInitted = true; CONSOLE_SCREEN_BUFFER_INFO csbiInfo; GetConsoleScreenBufferInfo(stdoutHandle, &csbiInfo); originalForegroundAttributes = csbiInfo.wAttributes & ~(BACKGROUND_GREEN | BACKGROUND_RED | BACKGROUND_BLUE | BACKGROUND_INTENSITY); originalBackgroundAttributes = csbiInfo.wAttributes & ~(FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY); } #define DOCTEST_SET_ATTR(x) SetConsoleTextAttribute(stdoutHandle, x | originalBackgroundAttributes) // clang-format off switch (code) { case Color::White: DOCTEST_SET_ATTR(FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE); break; case Color::Red: DOCTEST_SET_ATTR(FOREGROUND_RED); break; case Color::Green: DOCTEST_SET_ATTR(FOREGROUND_GREEN); break; case Color::Blue: DOCTEST_SET_ATTR(FOREGROUND_BLUE); break; case Color::Cyan: DOCTEST_SET_ATTR(FOREGROUND_BLUE | FOREGROUND_GREEN); break; case Color::Yellow: DOCTEST_SET_ATTR(FOREGROUND_RED | FOREGROUND_GREEN); break; case Color::Grey: DOCTEST_SET_ATTR(0); break; case Color::LightGrey: DOCTEST_SET_ATTR(FOREGROUND_INTENSITY); break; case Color::BrightRed: DOCTEST_SET_ATTR(FOREGROUND_INTENSITY | FOREGROUND_RED); break; case Color::BrightGreen: DOCTEST_SET_ATTR(FOREGROUND_INTENSITY | FOREGROUND_GREEN); break; case Color::BrightWhite: DOCTEST_SET_ATTR(FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE); break; case Color::None: case Color::Bright: // invalid default: DOCTEST_SET_ATTR(originalForegroundAttributes); } // clang-format on #undef DOCTEST_SET_ATTR #endif // DOCTEST_CONFIG_COLORS_WINDOWS } // this is needed because MSVC does not permit mixing 2 exception handling schemes in a function int callTestFunc(funcType f) { int res = EXIT_SUCCESS; #ifndef DOCTEST_CONFIG_NO_EXCEPTIONS try { #endif // DOCTEST_CONFIG_NO_EXCEPTIONS f(); if(getContextState()->numFailedAssertionsForCurrentTestcase) res = EXIT_FAILURE; #ifndef DOCTEST_CONFIG_NO_EXCEPTIONS } catch(const TestFailureException&) { res = EXIT_FAILURE; } catch(...) { DOCTEST_LOG_START(); logTestCrashed(); res = EXIT_FAILURE; } #endif // DOCTEST_CONFIG_NO_EXCEPTIONS return res; } // depending on the current options this will remove the path of filenames const char* fileForOutput(const char* file) { if(getContextState()->no_path_in_filenames) { const char* back = strrchr(file, '\\'); const char* forward = strrchr(file, '/'); if(back || forward) { if(back > forward) forward = back; return forward + 1; } } return file; } #ifdef DOCTEST_PLATFORM_MAC #include #include #include // The following function is taken directly from the following technical note: // http://developer.apple.com/library/mac/#qa/qa2004/qa1361.html // Returns true if the current process is being debugged (either // running under the debugger or has a debugger attached post facto). bool isDebuggerActive() { int mib[4]; struct kinfo_proc info; size_t size; // Initialize the flags so that, if sysctl fails for some bizarre // reason, we get a predictable result. info.kp_proc.p_flag = 0; // Initialize mib, which tells sysctl the info we want, in this case // we're looking for information about a specific process ID. mib[0] = CTL_KERN; mib[1] = KERN_PROC; mib[2] = KERN_PROC_PID; mib[3] = getpid(); // Call sysctl. size = sizeof(info); if(sysctl(mib, sizeof(mib) / sizeof(*mib), &info, &size, 0, 0) != 0) { fprintf(stderr, "\n** Call to sysctl failed - unable to determine if debugger is " "active **\n\n"); return false; } // We're being debugged if the P_TRACED flag is set. return ((info.kp_proc.p_flag & P_TRACED) != 0); } #elif defined(_MSC_VER) || defined(__MINGW32__) bool isDebuggerActive() { return ::IsDebuggerPresent() != 0; } #else bool isDebuggerActive() { return false; } #endif // Platform #ifdef DOCTEST_PLATFORM_WINDOWS void myOutputDebugString(const String& text) { ::OutputDebugStringA(text.c_str()); } #else // TODO: integration with XCode and other IDEs void myOutputDebugString(const String&) {} #endif // Platform const char* getSeparator() { return "===============================================================================\n"; } void printToDebugConsole(const String& text) { if(isDebuggerActive()) myOutputDebugString(text.c_str()); } void addFailedAssert(assertType::Enum assert_type) { if((assert_type & assertType::is_warn) == 0) { getContextState()->numFailedAssertionsForCurrentTestcase++; getContextState()->numFailedAssertions++; } } void logTestStart(const char* name, const char* file, unsigned line) { const char* newLine = "\n"; char loc[DOCTEST_SNPRINTF_BUFFER_LENGTH]; DOCTEST_SNPRINTF(loc, DOCTEST_COUNTOF(loc), "%s(%d)\n", fileForOutput(file), line); char msg[DOCTEST_SNPRINTF_BUFFER_LENGTH]; DOCTEST_SNPRINTF(msg, DOCTEST_COUNTOF(msg), "%s\n", name); DOCTEST_PRINTF_COLORED(getSeparator(), Color::Yellow); DOCTEST_PRINTF_COLORED(loc, Color::LightGrey); DOCTEST_PRINTF_COLORED(msg, Color::None); String subcaseStuff = ""; std::vector& subcasesStack = getContextState()->subcasesStack; for(unsigned i = 0; i < subcasesStack.size(); ++i) { char subcase[DOCTEST_SNPRINTF_BUFFER_LENGTH]; DOCTEST_SNPRINTF(subcase, DOCTEST_COUNTOF(loc), " %s\n", subcasesStack[i].m_signature.m_name); DOCTEST_PRINTF_COLORED(subcase, Color::None); subcaseStuff += subcase; } DOCTEST_PRINTF_COLORED(newLine, Color::None); printToDebugConsole(String(getSeparator()) + loc + msg + subcaseStuff.c_str() + newLine); } void logTestEnd() {} void logTestCrashed() { char msg[DOCTEST_SNPRINTF_BUFFER_LENGTH]; DOCTEST_SNPRINTF(msg, DOCTEST_COUNTOF(msg), "TEST CASE FAILED! (threw exception)\n\n"); DOCTEST_PRINTF_COLORED(msg, Color::Red); printToDebugConsole(String(msg)); } void logAssert(bool passed, const char* decomposition, bool threw, const char* expr, assertType::Enum assert_type, const char* file, int line) { char loc[DOCTEST_SNPRINTF_BUFFER_LENGTH]; DOCTEST_SNPRINTF(loc, DOCTEST_COUNTOF(loc), "%s(%d)", fileForOutput(file), line); char msg[DOCTEST_SNPRINTF_BUFFER_LENGTH]; if(passed) DOCTEST_SNPRINTF(msg, DOCTEST_COUNTOF(msg), " PASSED!\n"); else DOCTEST_SNPRINTF(msg, DOCTEST_COUNTOF(msg), " FAILED! %s\n", (threw ? "(threw exception)" : "")); char info1[DOCTEST_SNPRINTF_BUFFER_LENGTH]; DOCTEST_SNPRINTF(info1, DOCTEST_COUNTOF(info1), " %s( %s )\n", getAssertString(assert_type), expr); char info2[DOCTEST_SNPRINTF_BUFFER_LENGTH]; char info3[DOCTEST_SNPRINTF_BUFFER_LENGTH]; info2[0] = 0; info3[0] = 0; if(!threw) { DOCTEST_SNPRINTF(info2, DOCTEST_COUNTOF(info2), "with expansion:\n"); DOCTEST_SNPRINTF(info3, DOCTEST_COUNTOF(info3), " %s( %s )\n", getAssertString(assert_type), decomposition); } DOCTEST_PRINTF_COLORED(loc, Color::LightGrey); DOCTEST_PRINTF_COLORED(msg, passed ? Color::BrightGreen : Color::Red); DOCTEST_PRINTF_COLORED(info1, Color::Cyan); DOCTEST_PRINTF_COLORED(info2, Color::None); DOCTEST_PRINTF_COLORED(info3, Color::Cyan); DOCTEST_PRINTF_COLORED("\n", Color::None); printToDebugConsole(String(loc) + msg + info1 + info2 + info3 + "\n"); } void logAssertThrows(bool threw, const char* expr, assertType::Enum assert_type, const char* file, int line) { char loc[DOCTEST_SNPRINTF_BUFFER_LENGTH]; DOCTEST_SNPRINTF(loc, DOCTEST_COUNTOF(loc), "%s(%d)", fileForOutput(file), line); char msg[DOCTEST_SNPRINTF_BUFFER_LENGTH]; if(threw) DOCTEST_SNPRINTF(msg, DOCTEST_COUNTOF(msg), " PASSED!\n"); else DOCTEST_SNPRINTF(msg, DOCTEST_COUNTOF(msg), " FAILED!\n"); char info1[DOCTEST_SNPRINTF_BUFFER_LENGTH]; DOCTEST_SNPRINTF(info1, DOCTEST_COUNTOF(info1), " %s( %s )\n\n", getAssertString(assert_type), expr); DOCTEST_PRINTF_COLORED(loc, Color::LightGrey); DOCTEST_PRINTF_COLORED(msg, threw ? Color::BrightGreen : Color::Red); DOCTEST_PRINTF_COLORED(info1, Color::Cyan); printToDebugConsole(String(loc) + msg + info1); } void logAssertThrowsAs(bool threw, bool threw_as, const char* as, const char* expr, assertType::Enum assert_type, const char* file, int line) { char loc[DOCTEST_SNPRINTF_BUFFER_LENGTH]; DOCTEST_SNPRINTF(loc, DOCTEST_COUNTOF(loc), "%s(%d)", fileForOutput(file), line); char msg[DOCTEST_SNPRINTF_BUFFER_LENGTH]; if(threw_as) DOCTEST_SNPRINTF(msg, DOCTEST_COUNTOF(msg), " PASSED!\n"); else DOCTEST_SNPRINTF(msg, DOCTEST_COUNTOF(msg), " FAILED! %s\n", (threw ? "(threw something else)" : "(didn't throw at all)")); char info1[DOCTEST_SNPRINTF_BUFFER_LENGTH]; DOCTEST_SNPRINTF(info1, DOCTEST_COUNTOF(info1), " %s( %s, %s )\n\n", getAssertString(assert_type), expr, as); DOCTEST_PRINTF_COLORED(loc, Color::LightGrey); DOCTEST_PRINTF_COLORED(msg, threw_as ? Color::BrightGreen : Color::Red); DOCTEST_PRINTF_COLORED(info1, Color::Cyan); printToDebugConsole(String(loc) + msg + info1); } void logAssertNothrow(bool threw, const char* expr, assertType::Enum assert_type, const char* file, int line) { char loc[DOCTEST_SNPRINTF_BUFFER_LENGTH]; DOCTEST_SNPRINTF(loc, DOCTEST_COUNTOF(loc), "%s(%d)", fileForOutput(file), line); char msg[DOCTEST_SNPRINTF_BUFFER_LENGTH]; if(!threw) DOCTEST_SNPRINTF(msg, DOCTEST_COUNTOF(msg), " PASSED!\n"); else DOCTEST_SNPRINTF(msg, DOCTEST_COUNTOF(msg), " FAILED!\n"); char info1[DOCTEST_SNPRINTF_BUFFER_LENGTH]; DOCTEST_SNPRINTF(info1, DOCTEST_COUNTOF(info1), " %s( %s )\n\n", getAssertString(assert_type), expr); DOCTEST_PRINTF_COLORED(loc, Color::LightGrey); DOCTEST_PRINTF_COLORED(msg, !threw ? Color::BrightGreen : Color::Red); DOCTEST_PRINTF_COLORED(info1, Color::Cyan); printToDebugConsole(String(loc) + msg + info1); } ResultBuilder::ResultBuilder(assertType::Enum assert_type, const char* file, int line, const char* expr, const char* exception_type) : m_assert_type(assert_type) , m_file(file) , m_line(line) , m_expr(expr) , m_exception_type(exception_type) , m_threw(false) , m_threw_as(false) , m_failed(false) {} bool ResultBuilder::log() { if((m_assert_type & assertType::is_warn) == 0) DOCTEST_GCS().numAssertionsForCurrentTestcase++; if(m_assert_type & assertType::is_false) { m_result.invert(); m_failed = m_result; } else if(m_assert_type & assertType::is_throws) { m_failed = !m_threw; } else if(m_assert_type & assertType::is_throws_as) { m_failed = !m_threw_as; } else if(m_assert_type & assertType::is_nothrow) { m_failed = m_threw; } else { m_failed = m_result; } if(m_failed || DOCTEST_GCS().success) { DOCTEST_LOG_START(); if(m_assert_type & assertType::is_throws) { logAssertThrows(m_threw, m_expr, m_assert_type, m_file, m_line); } else if(m_assert_type & assertType::is_throws_as) { logAssertThrowsAs(m_threw, m_threw_as, m_exception_type, m_expr, m_assert_type, m_file, m_line); } else if(m_assert_type & assertType::is_nothrow) { logAssertNothrow(m_threw, m_expr, m_assert_type, m_file, m_line); } else { logAssert(m_result.m_passed, m_result.m_decomposition.c_str(), m_threw, m_expr, m_assert_type, m_file, m_line); } } if(m_failed) { addFailedAssert(m_assert_type); if(isDebuggerActive() && !DOCTEST_GCS().no_breaks) return true; // should break into the debugger } return false; } void ResultBuilder::react() const { if(m_failed && checkIfShouldThrow(m_assert_type)) throwException(); } // the implementation of parseFlag() bool parseFlagImpl(int argc, const char* const* argv, const char* pattern) { for(int i = argc - 1; i >= 0; --i) { const char* temp = strstr(argv[i], pattern); if(temp && my_strlen(temp) == my_strlen(pattern)) { // eliminate strings in which the chars before the option are not '-' bool noBadCharsFound = true; while(temp != argv[i]) { if(*--temp != '-') { noBadCharsFound = false; break; } } if(noBadCharsFound && argv[i][0] == '-') return true; } } return false; } // locates a flag on the command line bool parseFlag(int argc, const char* const* argv, const char* pattern) { #ifndef DOCTEST_CONFIG_NO_UNPREFIXED_OPTIONS if(!parseFlagImpl(argc, argv, pattern)) return parseFlagImpl(argc, argv, pattern + 3); // 3 for "dt-" return true; #else // DOCTEST_CONFIG_NO_UNPREFIXED_OPTIONS return parseFlagImpl(argc, argv, pattern); #endif // DOCTEST_CONFIG_NO_UNPREFIXED_OPTIONS } // the implementation of parseOption() bool parseOptionImpl(int argc, const char* const* argv, const char* pattern, String& res) { for(int i = argc - 1; i >= 0; --i) { const char* temp = strstr(argv[i], pattern); if(temp) { // eliminate matches in which the chars before the option are not '-' bool noBadCharsFound = true; const char* curr = argv[i]; while(curr != temp) { if(*curr++ != '-') { noBadCharsFound = false; break; } } if(noBadCharsFound && argv[i][0] == '-') { temp += my_strlen(pattern); unsigned len = my_strlen(temp); if(len) { res = temp; return true; } } } } return false; } // parses an option and returns the string after the '=' character bool parseOption(int argc, const char* const* argv, const char* pattern, String& res, const String& defaultVal = String()) { res = defaultVal; #ifndef DOCTEST_CONFIG_NO_UNPREFIXED_OPTIONS if(!parseOptionImpl(argc, argv, pattern, res)) return parseOptionImpl(argc, argv, pattern + 3, res); // 3 for "dt-" return true; #else // DOCTEST_CONFIG_NO_UNPREFIXED_OPTIONS return parseOptionImpl(argc, argv, pattern, res); #endif // DOCTEST_CONFIG_NO_UNPREFIXED_OPTIONS } // parses a comma separated list of words after a pattern in one of the arguments in argv bool parseCommaSepArgs(int argc, const char* const* argv, const char* pattern, std::vector& res) { String filtersString; if(parseOption(argc, argv, pattern, filtersString)) { // tokenize with "," as a separator char* pch = strtok(filtersString.c_str(), ","); // modifies the string while(pch != 0) { if(my_strlen(pch)) res.push_back(pch); pch = strtok(0, ","); // uses the strtok() internal state to go to the next token } return true; } return false; } enum optionType { option_bool, option_int }; // parses an int/bool option from the command line bool parseIntOption(int argc, const char* const* argv, const char* pattern, optionType type, int& res) { String parsedValue; if(parseOption(argc, argv, pattern, parsedValue)) { if(type == 0) { // boolean const char positive[][5] = {"1", "true", "on", "yes"}; // 5 - strlen("true") + 1 const char negative[][6] = {"0", "false", "off", "no"}; // 6 - strlen("false") + 1 // if the value matches any of the positive/negative possibilities for(unsigned i = 0; i < 4; i++) { if(parsedValue.compare(positive[i], true) == 0) { res = 1; return true; } if(parsedValue.compare(negative[i], true) == 0) { res = 0; return true; } } } else { // integer int theInt = atoi(parsedValue.c_str()); if(theInt != 0) { res = theInt; return true; } } } return false; } void printVersion() { if(getContextState()->no_version == false) { DOCTEST_PRINTF_COLORED("[doctest] ", Color::Cyan); printf("doctest version is \"%s\"\n", DOCTEST_VERSION_STR); } } void printHelp() { printVersion(); DOCTEST_PRINTF_COLORED("[doctest]\n", Color::Cyan); DOCTEST_PRINTF_COLORED("[doctest] ", Color::Cyan); printf("boolean values: \"1/on/yes/true\" or \"0/off/no/false\"\n"); DOCTEST_PRINTF_COLORED("[doctest] ", Color::Cyan); printf("filter values: \"str1,str2,str3\" (comma separated strings)\n"); DOCTEST_PRINTF_COLORED("[doctest]\n", Color::Cyan); DOCTEST_PRINTF_COLORED("[doctest] ", Color::Cyan); printf("filters use wildcards for matching strings\n"); DOCTEST_PRINTF_COLORED("[doctest] ", Color::Cyan); printf("something passes a filter if any of the strings in a filter matches\n"); DOCTEST_PRINTF_COLORED("[doctest]\n", Color::Cyan); DOCTEST_PRINTF_COLORED("[doctest] ", Color::Cyan); printf("ALL FLAGS, OPTIONS AND FILTERS ALSO AVAILABLE WITH A \"dt-\" PREFIX!!!\n"); DOCTEST_PRINTF_COLORED("[doctest]\n", Color::Cyan); DOCTEST_PRINTF_COLORED("[doctest] ", Color::Cyan); printf("Query flags - the program quits after them. Available:\n\n"); printf(" -?, --help, -h prints this message\n"); printf(" -v, --version prints the version\n"); printf(" -c, --count prints the number of matching tests\n"); printf(" -ltc, --list-test-cases lists all matching tests by name\n"); printf(" -lts, --list-test-suites lists all matching test suites\n\n"); // ==================================================================================== << 79 DOCTEST_PRINTF_COLORED("[doctest] ", Color::Cyan); printf("The available / options/filters are:\n\n"); printf(" -tc, --test-case= filters tests by their name\n"); printf(" -tce, --test-case-exclude= filters OUT tests by their name\n"); printf(" -sf, --source-file= filters tests by their file\n"); printf(" -sfe, --source-file-exclude= filters OUT tests by their file\n"); printf(" -ts, --test-suite= filters tests by their test suite\n"); printf(" -tse, --test-suite-exclude= filters OUT tests by their test suite\n"); printf(" -ob, --order-by= how the tests should be ordered\n"); printf(" - by [file/suite/name/rand]\n"); printf(" -rs, --rand-seed= seed for random ordering\n"); printf(" -f, --first= the first test passing the filters to\n"); printf(" execute - for range-based execution\n"); printf(" -l, --last= the last test passing the filters to\n"); printf(" execute - for range-based execution\n"); printf(" -aa, --abort-after= stop after failed assertions\n\n"); DOCTEST_PRINTF_COLORED("[doctest] ", Color::Cyan); printf("Bool options - can be used like flags and true is assumed. Available:\n\n"); printf(" -s, --success= include successful assertions in output\n"); printf(" -cs, --case-sensitive= filters being treated as case sensitive\n"); printf(" -e, --exit= exits after the tests finish\n"); printf(" -nt, --no-throw= skips exceptions-related assert checks\n"); printf(" -ne, --no-exitcode= returns (or exits) always with success\n"); printf(" -nr, --no-run= skips all runtime doctest operations\n"); printf(" -nv, --no-version= omit the framework version in the output\n"); printf(" -nc, --no-colors= disables colors in output\n"); printf(" -nb, --no-breaks= disables breakpoints in debuggers\n"); printf(" -npf, --no-path-filenames= only filenames and no paths in output\n\n"); // ==================================================================================== << 79 DOCTEST_PRINTF_COLORED("[doctest] ", Color::Cyan); printf("for more information visit the project documentation\n\n"); } } // namespace detail Context::Context(int argc, const char* const* argv) : p(new detail::ContextState) { parseArgs(argc, argv, true); } Context::~Context() { delete p; } void Context::applyCommandLine(int argc, const char* const* argv) { parseArgs(argc, argv); } // parses args void Context::parseArgs(int argc, const char* const* argv, bool withDefaults) { using namespace detail; // clang-format off parseCommaSepArgs(argc, argv, "dt-source-file=", p->filters[0]); parseCommaSepArgs(argc, argv, "dt-sf=", p->filters[0]); parseCommaSepArgs(argc, argv, "dt-source-file-exclude=",p->filters[1]); parseCommaSepArgs(argc, argv, "dt-sfe=", p->filters[1]); parseCommaSepArgs(argc, argv, "dt-test-suite=", p->filters[2]); parseCommaSepArgs(argc, argv, "dt-ts=", p->filters[2]); parseCommaSepArgs(argc, argv, "dt-test-suite-exclude=", p->filters[3]); parseCommaSepArgs(argc, argv, "dt-tse=", p->filters[3]); parseCommaSepArgs(argc, argv, "dt-test-case=", p->filters[4]); parseCommaSepArgs(argc, argv, "dt-tc=", p->filters[4]); parseCommaSepArgs(argc, argv, "dt-test-case-exclude=", p->filters[5]); parseCommaSepArgs(argc, argv, "dt-tce=", p->filters[5]); // clang-format on int intRes = 0; String strRes; #define DOCTEST_PARSE_AS_BOOL_OR_FLAG(name, sname, var, default) \ if(parseIntOption(argc, argv, DOCTEST_STR_CONCAT_TOSTR(name, =), option_bool, intRes) || \ parseIntOption(argc, argv, DOCTEST_STR_CONCAT_TOSTR(sname, =), option_bool, intRes)) \ p->var = !!intRes; \ else if(parseFlag(argc, argv, #name) || parseFlag(argc, argv, #sname)) \ p->var = 1; \ else if(withDefaults) \ p->var = default #define DOCTEST_PARSE_INT_OPTION(name, sname, var, default) \ if(parseIntOption(argc, argv, DOCTEST_STR_CONCAT_TOSTR(name, =), option_int, intRes) || \ parseIntOption(argc, argv, DOCTEST_STR_CONCAT_TOSTR(sname, =), option_int, intRes)) \ p->var = intRes; \ else if(withDefaults) \ p->var = default #define DOCTEST_PARSE_STR_OPTION(name, sname, var, default) \ if(parseOption(argc, argv, DOCTEST_STR_CONCAT_TOSTR(name, =), strRes, default) || \ parseOption(argc, argv, DOCTEST_STR_CONCAT_TOSTR(sname, =), strRes, default) || \ withDefaults) \ p->var = strRes // clang-format off DOCTEST_PARSE_STR_OPTION(dt-order-by, dt-ob, order_by, "file"); DOCTEST_PARSE_INT_OPTION(dt-rand-seed, dt-rs, rand_seed, 0); DOCTEST_PARSE_INT_OPTION(dt-first, dt-f, first, 1); DOCTEST_PARSE_INT_OPTION(dt-last, dt-l, last, 0); DOCTEST_PARSE_INT_OPTION(dt-abort-after, dt-aa, abort_after, 0); DOCTEST_PARSE_AS_BOOL_OR_FLAG(dt-success, dt-s, success, 0); DOCTEST_PARSE_AS_BOOL_OR_FLAG(dt-case-sensitive, dt-cs, case_sensitive, 0); DOCTEST_PARSE_AS_BOOL_OR_FLAG(dt-exit, dt-e, exit, 0); DOCTEST_PARSE_AS_BOOL_OR_FLAG(dt-no-throw, dt-nt, no_throw, 0); DOCTEST_PARSE_AS_BOOL_OR_FLAG(dt-no-exitcode, dt-ne, no_exitcode, 0); DOCTEST_PARSE_AS_BOOL_OR_FLAG(dt-no-run, dt-nr, no_run, 0); DOCTEST_PARSE_AS_BOOL_OR_FLAG(dt-no-version, dt-nv, no_version, 0); DOCTEST_PARSE_AS_BOOL_OR_FLAG(dt-no-colors, dt-nc, no_colors, 0); DOCTEST_PARSE_AS_BOOL_OR_FLAG(dt-no-breaks, dt-nb, no_breaks, 0); DOCTEST_PARSE_AS_BOOL_OR_FLAG(dt-no-path-filenames, dt-npf, no_path_in_filenames, 0); // clang-format on #undef DOCTEST_PARSE_STR_OPTION #undef DOCTEST_PARSE_INT_OPTION #undef DOCTEST_PARSE_AS_BOOL_OR_FLAG if(withDefaults) { p->help = false; p->version = false; p->count = false; p->list_test_cases = false; p->list_test_suites = false; } if(parseFlag(argc, argv, "dt-help") || parseFlag(argc, argv, "dt-h") || parseFlag(argc, argv, "dt-?")) { p->help = true; p->exit = true; } if(parseFlag(argc, argv, "dt-version") || parseFlag(argc, argv, "dt-v")) { p->version = true; p->exit = true; } if(parseFlag(argc, argv, "dt-count") || parseFlag(argc, argv, "dt-c")) { p->count = true; p->exit = true; } if(parseFlag(argc, argv, "dt-list-test-cases") || parseFlag(argc, argv, "dt-ltc")) { p->list_test_cases = true; p->exit = true; } if(parseFlag(argc, argv, "dt-list-test-suites") || parseFlag(argc, argv, "dt-lts")) { p->list_test_suites = true; p->exit = true; } } // allows the user to add procedurally to the filters from the command line void Context::addFilter(const char* filter, const char* value) { setOption(filter, value); } // allows the user to clear all filters from the command line void Context::clearFilters() { for(unsigned i = 0; i < p->filters.size(); ++i) p->filters[i].clear(); } // allows the user to override procedurally the int/bool options from the command line void Context::setOption(const char* option, int value) { setOption(option, toString(value).c_str()); } // allows the user to override procedurally the string options from the command line void Context::setOption(const char* option, const char* value) { String argv = String("-") + option + "=" + value; const char* lvalue = argv.c_str(); parseArgs(1, &lvalue); } // users should query this in their main() and exit the program if true bool Context::shouldExit() { return p->exit; } // the main function that does all the filtering and test running int Context::run() { using namespace detail; getContextState() = p; p->resetRunData(); // handle version, help and no_run if(p->no_run || p->version || p->help) { if(p->version) printVersion(); if(p->help) printHelp(); getContextState() = 0; return EXIT_SUCCESS; } printVersion(); DOCTEST_PRINTF_COLORED("[doctest] ", Color::Cyan); printf("run with \"--help\" for options\n"); unsigned i = 0; // counter used for loops - here for VC6 std::set& registeredTests = getRegisteredTests(); std::vector testArray; for(std::set::iterator it = registeredTests.begin(); it != registeredTests.end(); ++it) testArray.push_back(&(*it)); // sort the collected records if(testArray.size() > 0) { if(p->order_by.compare("file", true) == 0) { qsort(&testArray[0], testArray.size(), sizeof(TestData*), fileOrderComparator); } else if(p->order_by.compare("suite", true) == 0) { qsort(&testArray[0], testArray.size(), sizeof(TestData*), suiteOrderComparator); } else if(p->order_by.compare("name", true) == 0) { qsort(&testArray[0], testArray.size(), sizeof(TestData*), nameOrderComparator); } else if(p->order_by.compare("rand", true) == 0) { srand(p->rand_seed); // random_shuffle implementation const TestData** first = &testArray[0]; for(i = testArray.size() - 1; i > 0; --i) { int idxToSwap = rand() % (i + 1); const TestData* temp = first[i]; first[i] = first[idxToSwap]; first[idxToSwap] = temp; } } } if(p->list_test_cases) { DOCTEST_PRINTF_COLORED("[doctest] ", Color::Cyan); printf("listing all test case names\n"); } std::set testSuitesPassingFilters; if(p->list_test_suites) { DOCTEST_PRINTF_COLORED("[doctest] ", Color::Cyan); printf("listing all test suites\n"); } unsigned numTestsPassingFilters = 0; unsigned numFailed = 0; // invoke the registered functions if they match the filter criteria (or just count them) for(i = 0; i < testArray.size(); i++) { const TestData& data = *testArray[i]; if(!matchesAny(data.m_file, p->filters[0], 1, p->case_sensitive)) continue; if(matchesAny(data.m_file, p->filters[1], 0, p->case_sensitive)) continue; if(!matchesAny(data.m_suite, p->filters[2], 1, p->case_sensitive)) continue; if(matchesAny(data.m_suite, p->filters[3], 0, p->case_sensitive)) continue; if(!matchesAny(data.m_name, p->filters[4], 1, p->case_sensitive)) continue; if(matchesAny(data.m_name, p->filters[5], 0, p->case_sensitive)) continue; numTestsPassingFilters++; // do not execute the test if we are to only count the number of filter passing tests if(p->count) continue; // print the name of the test and don't execute it if(p->list_test_cases) { printf("%s\n", data.m_name); continue; } // print the name of the test suite if not done already and don't execute it if(p->list_test_suites) { if(testSuitesPassingFilters.count(data.m_suite) == 0) { printf("%s\n", data.m_suite); testSuitesPassingFilters.insert(data.m_suite); } continue; } // skip the test if it is not in the execution range if((p->last < numTestsPassingFilters && p->first <= p->last) || (p->first > numTestsPassingFilters)) continue; // execute the test if it passes all the filtering { #ifdef _MSC_VER //__try { #endif // _MSC_VER p->currentTest = &data; // if logging successful tests - force the start log p->hasLoggedCurrentTestStart = false; if(p->success) DOCTEST_LOG_START(); unsigned didFail = 0; p->subcasesPassed.clear(); do { // reset the assertion state p->numAssertionsForCurrentTestcase = 0; p->numFailedAssertionsForCurrentTestcase = 0; // reset some of the fields for subcases (except for the set of fully passed ones) p->subcasesHasSkipped = false; p->subcasesCurrentLevel = 0; p->subcasesEnteredLevels.clear(); // execute the test didFail += callTestFunc(data.m_f); p->numAssertions += p->numAssertionsForCurrentTestcase; // exit this loop if enough assertions have failed if(p->abort_after > 0 && p->numFailedAssertions >= p->abort_after) p->subcasesHasSkipped = false; // if the start has been logged if(p->hasLoggedCurrentTestStart) logTestEnd(); p->hasLoggedCurrentTestStart = false; } while(p->subcasesHasSkipped == true); if(didFail > 0) numFailed++; // stop executing tests if enough assertions have failed if(p->abort_after > 0 && p->numFailedAssertions >= p->abort_after) break; #ifdef _MSC_VER //} __except(1) { // printf("Unknown SEH exception caught!\n"); // numFailed++; //} #endif // _MSC_VER } } DOCTEST_PRINTF_COLORED(getSeparator(), numFailed > 0 ? Color::Red : Color::Green); if(p->count || p->list_test_cases || p->list_test_suites) { DOCTEST_PRINTF_COLORED("[doctest] ", Color::Cyan); printf("number of tests passing the current filters: %d\n", numTestsPassingFilters); } else { char buff[DOCTEST_SNPRINTF_BUFFER_LENGTH]; DOCTEST_PRINTF_COLORED("[doctest] ", Color::Cyan); DOCTEST_SNPRINTF(buff, DOCTEST_COUNTOF(buff), "test cases: %4d", numTestsPassingFilters); DOCTEST_PRINTF_COLORED(buff, Color::None); DOCTEST_SNPRINTF(buff, DOCTEST_COUNTOF(buff), " | "); DOCTEST_PRINTF_COLORED(buff, Color::None); DOCTEST_SNPRINTF(buff, DOCTEST_COUNTOF(buff), "%4d passed", numTestsPassingFilters - numFailed); DOCTEST_PRINTF_COLORED(buff, numFailed > 0 ? Color::None : Color::Green); DOCTEST_SNPRINTF(buff, DOCTEST_COUNTOF(buff), " | "); DOCTEST_PRINTF_COLORED(buff, Color::None); DOCTEST_SNPRINTF(buff, DOCTEST_COUNTOF(buff), "%4d failed", numFailed); DOCTEST_PRINTF_COLORED(buff, numFailed > 0 ? Color::Red : Color::None); DOCTEST_SNPRINTF(buff, DOCTEST_COUNTOF(buff), " | "); DOCTEST_PRINTF_COLORED(buff, Color::None); DOCTEST_SNPRINTF(buff, DOCTEST_COUNTOF(buff), "%4d skipped\n", static_cast(testArray.size()) - numTestsPassingFilters); DOCTEST_PRINTF_COLORED(buff, Color::None); DOCTEST_PRINTF_COLORED("[doctest] ", Color::Cyan); DOCTEST_SNPRINTF(buff, DOCTEST_COUNTOF(buff), "assertions: %4d", p->numAssertions); DOCTEST_PRINTF_COLORED(buff, Color::None); DOCTEST_SNPRINTF(buff, DOCTEST_COUNTOF(buff), " | "); DOCTEST_PRINTF_COLORED(buff, Color::None); DOCTEST_SNPRINTF(buff, DOCTEST_COUNTOF(buff), "%4d passed", p->numAssertions - p->numFailedAssertions); DOCTEST_PRINTF_COLORED(buff, numFailed > 0 ? Color::None : Color::Green); DOCTEST_SNPRINTF(buff, DOCTEST_COUNTOF(buff), " | "); DOCTEST_PRINTF_COLORED(buff, Color::None); DOCTEST_SNPRINTF(buff, DOCTEST_COUNTOF(buff), "%4d failed", p->numFailedAssertions); DOCTEST_PRINTF_COLORED(buff, p->numFailedAssertions > 0 ? Color::Red : Color::None); DOCTEST_SNPRINTF(buff, DOCTEST_COUNTOF(buff), " |\n"); DOCTEST_PRINTF_COLORED(buff, Color::None); } // remove any coloring DOCTEST_PRINTF_COLORED("", Color::None); getContextState() = 0; if(numFailed && !p->no_exitcode) return EXIT_FAILURE; return EXIT_SUCCESS; } } // namespace doctest #endif // DOCTEST_CONFIG_DISABLE #endif // DOCTEST_LIBRARY_IMPLEMENTATION #endif // DOCTEST_CONFIG_IMPLEMENT // == THIS SUPPLIES A MAIN FUNCTION AND SHOULD BE DONE ONLY IN ONE TRANSLATION UNIT #if defined(DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN) && !defined(DOCTEST_MAIN_CONFIGURED) #define DOCTEST_MAIN_CONFIGURED int main(int argc, char** argv) { return doctest::Context(argc, argv).run(); } #endif // DOCTEST_MAIN_CONFIGURED #if defined(__clang__) #pragma clang diagnostic pop #endif // __clang__ #if defined(__GNUC__) && !defined(__clang__) #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 6) #pragma GCC diagnostic pop #endif // > gcc 4.6 #endif // __GNUC__ #ifdef _MSC_VER #pragma warning(pop) #endif // _MSC_VER argagg-0.4.6/test/test.cpp000066400000000000000000001064651311215245100154220ustar00rootroot00000000000000#include "../include/argagg/argagg.hpp" #define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN #include "doctest.h" #include #include #include TEST_CASE("cmd_line_arg_is_option_flag") { CHECK(argagg::cmd_line_arg_is_option_flag("") == false); CHECK(argagg::cmd_line_arg_is_option_flag("a") == false); CHECK(argagg::cmd_line_arg_is_option_flag("abc") == false); CHECK(argagg::cmd_line_arg_is_option_flag("-") == false); CHECK(argagg::cmd_line_arg_is_option_flag("-a") == true); CHECK(argagg::cmd_line_arg_is_option_flag("-abc") == true); CHECK(argagg::cmd_line_arg_is_option_flag("-I/usr/local/include") == true); CHECK(argagg::cmd_line_arg_is_option_flag("--") == false); CHECK(argagg::cmd_line_arg_is_option_flag("---a") == false); CHECK(argagg::cmd_line_arg_is_option_flag("--a") == true); CHECK(argagg::cmd_line_arg_is_option_flag("--abc") == true); CHECK(argagg::cmd_line_arg_is_option_flag("---abc") == false); CHECK(argagg::cmd_line_arg_is_option_flag("--a@b") == false); CHECK(argagg::cmd_line_arg_is_option_flag("--a+b") == false); CHECK(argagg::cmd_line_arg_is_option_flag("--foo-bar") == true); CHECK(argagg::cmd_line_arg_is_option_flag("--output=~/out.txt") == true); } TEST_CASE("is_valid_flag_definition") { CHECK(argagg::is_valid_flag_definition("") == false); CHECK(argagg::is_valid_flag_definition("a") == false); CHECK(argagg::is_valid_flag_definition("abc") == false); CHECK(argagg::is_valid_flag_definition("-") == false); CHECK(argagg::is_valid_flag_definition("-a") == true); CHECK(argagg::is_valid_flag_definition("-abc") == false); CHECK(argagg::is_valid_flag_definition("-I/usr/local/include") == false); CHECK(argagg::is_valid_flag_definition("--") == false); CHECK(argagg::is_valid_flag_definition("---a") == false); CHECK(argagg::is_valid_flag_definition("--a") == true); CHECK(argagg::is_valid_flag_definition("--abc") == true); CHECK(argagg::is_valid_flag_definition("---abc") == false); CHECK(argagg::is_valid_flag_definition("--a@b") == false); CHECK(argagg::is_valid_flag_definition("--a+b") == false); CHECK(argagg::is_valid_flag_definition("--foo-bar") == true); CHECK(argagg::is_valid_flag_definition("--output=~/out.txt") == false); } TEST_CASE("flag_is_short") { CHECK(argagg::flag_is_short("-a") == true); CHECK(argagg::flag_is_short("-abc") == true); CHECK(argagg::flag_is_short("--a") == false); CHECK(argagg::flag_is_short("--abc") == false); CHECK(argagg::flag_is_short("--a-b") == false); } TEST_CASE("intro example") { argagg::parser argparser {{ { "help", {"-h", "--help"}, "shows this help message", 0}, { "delim", {"-d", "--delim"}, "delimiter (default: ,)", 1}, { "num", {"-n", "--num"}, "number", 1}, }}; std::vector argv { "test", "3.141", "foo", "-h", "bar", "300", "-n", "100", "-d", "-", "-", "--", "-b", "--blah"}; argagg::parser_results args; try { args = argparser.parse(argv.size(), &(argv.front())); } catch (const std::exception& e) { std::cerr << e.what() << std::endl; } CHECK(args.has_option("help") == true); CHECK(static_cast(args["help"]) == true); CHECK(args.has_option("delim") == true); CHECK(static_cast(args["delim"]) == true); auto delim = args["delim"].as(","); CHECK(delim == "-"); CHECK(args.has_option("num") == true); CHECK(static_cast(args["num"]) == true); int x = 0; if (args["num"]) { x = args["num"]; } CHECK(x == 100); auto y = 0.0; if (args.pos.size() > 0) { y = args.as(0); } CHECK(y == doctest::Approx(3.141)); CHECK(args.as(1) == "foo"); CHECK(args.as(2) == "bar"); CHECK(args.as(3) == 300); CHECK(args.as(4) == "-"); CHECK(args.as(5) == "-b"); CHECK(args.as(6) == "--blah"); } TEST_CASE("no definitions") { argagg::parser parser {{ }}; SUBCASE("no arguments") { std::vector argv { "test"}; argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); CHECK(args.has_option("help") == false); CHECK(args.has_option("verbose") == false); CHECK(args.has_option("output") == false); CHECK(args.count() == 0); } SUBCASE("with arguments") { std::vector argv { "test", "foo", "bar", "baz"}; argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); CHECK(args.has_option("help") == false); CHECK(args.has_option("verbose") == false); CHECK(args.has_option("output") == false); CHECK(args.count() == 3); CHECK(::std::string(args.pos[0]) == "foo"); CHECK(::std::string(args.pos[1]) == "bar"); CHECK(::std::string(args.pos[2]) == "baz"); } SUBCASE("with flags") { std::vector argv { "test", "--verbose", "-o", "baz"}; CHECK_THROWS_AS({ argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); }, argagg::unexpected_option_error); } } TEST_CASE("invalid definitions") { std::vector argv { "test"}; SUBCASE("no flags") { argagg::parser parser {{ {"bad", {}, "bad", 0}, }}; CHECK_THROWS_AS({ argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); }, argagg::invalid_flag); } SUBCASE("too short") { argagg::parser parser {{ {"bad", {"-"}, "bad", 0}, }}; CHECK_THROWS_AS({ argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); }, argagg::invalid_flag); } SUBCASE("too short 2") { argagg::parser parser {{ {"bad", {"a"}, "bad", 0}, }}; CHECK_THROWS_AS({ argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); }, argagg::invalid_flag); } SUBCASE("no hyphen") { argagg::parser parser {{ {"bad", {"bad"}, "bad", 0}, }}; CHECK_THROWS_AS({ argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); }, argagg::invalid_flag); } SUBCASE("short flag group") { argagg::parser parser {{ {"bad", {"-bad"}, "bad", 0}, }}; CHECK_THROWS_AS({ argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); }, argagg::invalid_flag); } SUBCASE("invalid character") { argagg::parser parser {{ {"bad", {"-b ad"}, "bad", 0}, }}; CHECK_THROWS_AS({ argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); }, argagg::invalid_flag); } SUBCASE("too many hyphens") { argagg::parser parser {{ {"bad", {"---bad"}, "bad", 0}, }}; CHECK_THROWS_AS({ argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); }, argagg::invalid_flag); } SUBCASE("long flag equal assignment") { argagg::parser parser {{ {"bad", {"--bad=still-bad"}, "bad", 0}, }}; CHECK_THROWS_AS({ argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); }, argagg::invalid_flag); } SUBCASE("duplicate short flags") { argagg::parser parser {{ {"bad", {"-b"}, "bad", 0}, {"bad2", {"-b"}, "bad2", 0}, }}; CHECK_THROWS_AS({ argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); }, argagg::invalid_flag); } SUBCASE("duplicate long flags") { argagg::parser parser {{ {"bad", {"--bad"}, "bad", 0}, {"bad2", {"--bad"}, "bad2", 0}, }}; CHECK_THROWS_AS({ argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); }, argagg::invalid_flag); } } TEST_CASE("simple") { argagg::parser parser {{ {"verbose", {"-v", "--verbose"}, "be verbose", 0}, {"output", {"-o", "--output"}, "output filename", 1}, }}; SUBCASE("no arguments") { std::vector argv { "test"}; argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); CHECK(args.has_option("help") == false); CHECK(args.has_option("verbose") == false); CHECK(args.has_option("output") == false); CHECK(args.count() == 0); } SUBCASE("no flags") { std::vector argv { "test", "foo", "bar", "baz"}; argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); CHECK(args.has_option("help") == false); CHECK(args.has_option("verbose") == false); CHECK_THROWS_AS({ args["verbose"].as(); }, std::out_of_range); CHECK(args["verbose"].as(999) == 999); CHECK(args.has_option("output") == false); CHECK(args.count() == 3); CHECK(args.as(0) == "foo"); CHECK(args.as(1) == "bar"); CHECK(args.as(2) == "baz"); } SUBCASE("only flags") { std::vector argv { "test", "--verbose", "--output", "foo", "-v", "-o", "bar"}; argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); CHECK(args.has_option("help") == false); CHECK(args.has_option("verbose") == true); CHECK(args["verbose"].count() == 2); CHECK(args["verbose"][0].arg == nullptr); CHECK(args["verbose"][1].arg == nullptr); CHECK_THROWS_AS({ args["verbose"][0].as(); }, argagg::option_lacks_argument_error); CHECK_THROWS_AS({ args["verbose"][0].as(); }, argagg::option_lacks_argument_error); CHECK(args.has_option("output") == true); CHECK(args["output"].count() == 2); CHECK(args["output"][0].as() == "foo"); CHECK(args["output"][1].as() == "bar"); CHECK(args.count() == 0); } SUBCASE("simple mixed") { std::vector argv { "test", "-v", "--output", "foo", "bar"}; argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); CHECK(args.has_option("help") == false); CHECK(args.has_option("verbose") == true); CHECK(args["verbose"].count() == 1); CHECK(args["verbose"][0].arg == nullptr); CHECK(args.has_option("output") == true); CHECK(args["output"].count() == 1); CHECK(args["output"].as() == "foo"); CHECK(args.count() == 1); CHECK(args.as(0) == "bar"); } SUBCASE("trailing flags") { std::vector argv { "test", "foo", "bar", "-v", "--output", "baz"}; argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); CHECK(args.has_option("help") == false); CHECK(args.has_option("verbose") == true); CHECK(args["verbose"].count() == 1); CHECK(args["verbose"][0].arg == nullptr); CHECK(args.has_option("output") == true); CHECK(args["output"].count() == 1); CHECK(args["output"].as() == "baz"); CHECK(args.count() == 2); CHECK(args.as(0) == "foo"); CHECK(args.as(1) == "bar"); } SUBCASE("interleaved positional arguments") { std::vector argv { "test", "foo", "-v", "bar", "--verbose", "baz", "--output", "dog", "cat"}; argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); CHECK(args.has_option("help") == false); CHECK(args.has_option("verbose") == true); CHECK(args["verbose"].count() == 2); CHECK(args["verbose"][0].arg == nullptr); CHECK(args.has_option("output") == true); CHECK(args["output"].count() == 1); CHECK(args["output"].as() == "dog"); CHECK(args.count() == 4); CHECK(args.as(0) == "foo"); CHECK(args.as(1) == "bar"); CHECK(args.as(2) == "baz"); CHECK(args.as(3) == "cat"); } SUBCASE("unused short flag") { std::vector argv { "test", "--output", "foo", "-h", "bar", "-v"}; CHECK_THROWS_AS({ argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); }, argagg::unexpected_option_error); } SUBCASE("unused long flag") { std::vector argv { "test", "--output", "foo", "--help", "bar", "-v"}; CHECK_THROWS_AS({ argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); }, argagg::unexpected_option_error); } } TEST_CASE("long flag equal format for arguments") { argagg::parser parser {{ {"verbose", {"-v", "--verbose"}, "be verbose", 0}, {"delim", {"-d", "--delim"}, "delimiter", 1}, {"output", {"-o", "--output"}, "output", 1}, }}; SUBCASE("basic") { std::vector argv { "test", "-v", "--output=foo", "--delim=bar", "baz"}; argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); CHECK(args.has_option("verbose") == true); CHECK(args.has_option("output") == true); CHECK(args["output"].as() == "foo"); CHECK(args.has_option("delim") == true); CHECK(args["delim"].as() == "bar"); CHECK(args.count() == 1); CHECK(args.as(0) == "baz"); } SUBCASE("empty") { std::vector argv { "test", "-v", "--output=", "--delim=", "baz"}; argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); CHECK(args.has_option("verbose") == true); CHECK(args.has_option("output") == true); CHECK(args["output"].as() == ""); CHECK(args.has_option("delim") == true); CHECK(args["delim"].as() == ""); CHECK(args.count() == 1); CHECK(args.as(0) == "baz"); } SUBCASE("symbols") { std::vector argv { "test", "-v", "--output=--foo!!", "--delim=,", "baz"}; argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); CHECK(args.has_option("verbose") == true); CHECK(args.has_option("output") == true); CHECK(args["output"].as() == "--foo!!"); CHECK(args.has_option("delim") == true); CHECK(args["delim"].as() == ","); CHECK(args.count() == 1); CHECK(args.as(0) == "baz"); } SUBCASE("unnecessary argument") { std::vector argv { "test", "--verbose=bad"}; CHECK_THROWS_AS({ argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); }, argagg::unexpected_argument_error); } } TEST_CASE("short flag groups") { argagg::parser parser {{ {"verbose", {"-v", "--verbose"}, "be verbose", 0}, {"help", {"-h", "--help"}, "help", 0}, {"foo", {"-f", "--foo"}, "foo", 0}, {"output", {"-o", "--output"}, "output", 1}, }}; SUBCASE("basic") { std::vector argv { "test", "-vhf", "bar"}; argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); CHECK(args.has_option("verbose") == true); CHECK(args.has_option("help") == true); CHECK(args.has_option("foo") == true); CHECK(args.has_option("output") == false); CHECK(args.count() == 1); CHECK(args.as(0) == "bar"); } SUBCASE("basic 2") { std::vector argv { "test", "-fvh", "bar"}; argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); CHECK(args.has_option("verbose") == true); CHECK(args.has_option("help") == true); CHECK(args.has_option("foo") == true); CHECK(args.has_option("output") == false); CHECK(args.count() == 1); CHECK(args.as(0) == "bar"); } SUBCASE("basic 3") { std::vector argv { "test", "-fh", "-v", "bar"}; argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); CHECK(args.has_option("verbose") == true); CHECK(args.has_option("help") == true); CHECK(args.has_option("foo") == true); CHECK(args.has_option("output") == false); CHECK(args.count() == 1); CHECK(args.as(0) == "bar"); } SUBCASE("basic 4") { std::vector argv { "test", "--vfh", "bar"}; CHECK_THROWS_AS({ argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); }, argagg::unexpected_option_error); } SUBCASE("unexpected symbol") { std::vector argv { "test", "-v-fh", "bar"}; CHECK_THROWS_AS({ argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); }, std::domain_error); } SUBCASE("trailing flag with argument") { std::vector argv { "test", "-vhfo", "bar"}; argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); CHECK(args.has_option("verbose") == true); CHECK(args.has_option("help") == true); CHECK(args.has_option("foo") == true); CHECK(args.has_option("output") == true); CHECK(args["output"].as() == "bar"); CHECK(args.count() == 0); } SUBCASE("leading flag with argument") { std::vector argv { "test", "-ohfv", "bar"}; argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); CHECK(args.has_option("verbose") == false); CHECK(args.has_option("help") == false); CHECK(args.has_option("foo") == false); CHECK(args.has_option("output") == true); CHECK(args["output"].as() == "hfv"); CHECK(args.count() == 1); CHECK(args.as(0) == "bar"); } SUBCASE("middling flag with argument") { std::vector argv { "test", "-vfoh", "bar"}; argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); CHECK(args.has_option("verbose") == true); CHECK(args.has_option("help") == false); CHECK(args.has_option("foo") == true); CHECK(args.has_option("output") == true); CHECK(args["output"].as() == "h"); CHECK(args.count() == 1); CHECK(args.as(0) == "bar"); } } TEST_CASE("flag stop") { argagg::parser parser {{ {"verbose", {"-v", "--verbose"}, "be verbose", 0}, {"delim", {"-d", "--delim"}, "delimiter", 1}, }}; SUBCASE("ignore flags after stop") { std::vector argv { "test", "-v", "--", "bar", "--verbose", "baz", "--delim", "dog", "-d", "cat"}; argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); CHECK(args.has_option("help") == false); CHECK(args.has_option("verbose") == true); CHECK(args["verbose"].count() == 1); CHECK(args["verbose"][0].arg == nullptr); CHECK(args.has_option("output") == false); CHECK(args.count() == 7); CHECK(args.as(0) == "bar"); CHECK(args.as(1) == "--verbose"); CHECK(args.as(2) == "baz"); CHECK(args.as(3) == "--delim"); CHECK(args.as(4) == "dog"); CHECK(args.as(5) == "-d"); CHECK(args.as(6) == "cat"); } SUBCASE("flag stop consumed as argument for option") { std::vector argv { "test", "-d", "--", "--", "-", "boo"}; argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); CHECK(args.has_option("help") == false); CHECK(args.has_option("verbose") == false); CHECK(args.has_option("delim") == true); CHECK(args["delim"].as() == "--"); CHECK(args.count() == 2); CHECK(args.as(0) == "-"); CHECK(args.as(1) == "boo"); } } TEST_CASE("option requires argument") { argagg::parser parser {{ {"verbose", {"-v", "--verbose"}, "be verbose", 0}, {"number", {"-n", "--number"}, "number", 1}, }}; SUBCASE("arguments provided") { std::vector argv { "test", "-n", "1", "2", "-n", "4"}; argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); CHECK(args.has_option("verbose") == false); CHECK(args.has_option("number") == true); CHECK(args["number"].count() == 2); CHECK(args["number"][0].as() == 1); CHECK(args["number"][1].as() == 4); CHECK(args.count() == 1); CHECK(args.as(0) == 2); } SUBCASE("negative numbers") { std::vector argv { "test", "-n", "-1", "-n", "-4444", "--", "-22"}; argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); CHECK(args.has_option("verbose") == false); CHECK(args.has_option("number") == true); CHECK(args["number"].count() == 2); CHECK(args["number"][0].as() == -1); CHECK(args["number"][1].as() == -4444); CHECK(args.count() == 1); CHECK(args.as(0) == -22); } SUBCASE("use flag as argument even though it is a valid flag") { std::vector argv { "test", "-n", "-v"}; argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); CHECK(args.has_option("number") == true); CHECK(args["number"].count() == 1); CHECK(args["number"][0].as() == "-v"); } SUBCASE("interrupted by unused flag") { std::vector argv { "test", "-n", "1", "2", "-c"}; CHECK_THROWS_AS({ argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); }, argagg::unexpected_option_error); } SUBCASE("given zero, end of args") { std::vector argv { "test", "-n"}; CHECK_THROWS_AS({ argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); }, argagg::option_lacks_argument_error); } } TEST_CASE("greedy processing") { argagg::parser parser {{ {"a", {"-a"}, "a", 0}, {"b", {"-b", "--bar"}, "b", 0}, {"c", {"-c"}, "c", 0}, {"output", {"-o", "--output"}, "output", 1}, }}; SUBCASE("short group example 1") { std::vector argv { "test", "-abco", "foo"}; argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); CHECK(args.has_option("a") == true); CHECK(args.has_option("b") == true); CHECK(args.has_option("c") == true); CHECK(args.has_option("output") == true); CHECK(args["output"].as() == "foo"); CHECK(args.count() == 0); } SUBCASE("short group example 2") { std::vector argv { "test", "-aboc", "foo"}; argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); CHECK(args.has_option("a") == true); CHECK(args.has_option("b") == true); CHECK(args.has_option("c") == false); CHECK(args.has_option("output") == true); CHECK(args["output"].as() == "c"); CHECK(args.count() == 1); CHECK(args.as(0) == "foo"); } SUBCASE("short group example 3") { std::vector argv { "test", "-aobc", "foo"}; argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); CHECK(args.has_option("a") == true); CHECK(args.has_option("b") == false); CHECK(args.has_option("c") == false); CHECK(args.has_option("output") == true); CHECK(args["output"].as() == "bc"); CHECK(args.count() == 1); CHECK(args.as(0) == "foo"); } SUBCASE("short group example 4") { std::vector argv { "test", "-oabc", "foo"}; argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); CHECK(args.has_option("a") == false); CHECK(args.has_option("b") == false); CHECK(args.has_option("c") == false); CHECK(args.has_option("output") == true); CHECK(args["output"].as() == "abc"); CHECK(args.count() == 1); CHECK(args.as(0) == "foo"); } SUBCASE("long example 1") { std::vector argv { "test", "--output=foo", "--", "--bar"}; argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); CHECK(args.has_option("a") == false); CHECK(args.has_option("b") == false); CHECK(args.has_option("c") == false); CHECK(args.has_option("output") == true); CHECK(args["output"].as() == "foo"); CHECK(args.count() == 1); CHECK(args.as(0) == "--bar"); } SUBCASE("long example 2") { std::vector argv { "test", "--output", "--", "--bar"}; argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); CHECK(args.has_option("a") == false); CHECK(args.has_option("b") == true); CHECK(args.has_option("c") == false); CHECK(args.has_option("output") == true); CHECK(args["output"].as() == "--"); CHECK(args.count() == 0); } SUBCASE("long example 3") { std::vector argv { "test", "--output", "--bar"}; argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); CHECK(args.has_option("a") == false); CHECK(args.has_option("b") == false); CHECK(args.has_option("c") == false); CHECK(args.has_option("output") == true); CHECK(args["output"].as() == "--bar"); CHECK(args.count() == 0); } } TEST_CASE("gcc example") { argagg::parser parser {{ {"verbose", {"-v", "--verbose"}, "be verbose", 0}, {"version", {"--version"}, "print version", 0}, {"include path", {"-I"}, "include path", 1}, {"library path", {"-L"}, "library path", 1}, {"library", {"-l"}, "library", 1}, {"output", {"-o"}, "output", 1}, }}; SUBCASE("version") { std::vector argv { "gcc", "--version"}; argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); CHECK(args.has_option("verbose") == false); CHECK(args.has_option("version") == true); CHECK(args.has_option("include path") == false); CHECK(args.has_option("library path") == false); CHECK(args.has_option("library") == false); CHECK(args.has_option("output") == false); CHECK(args.count() == 0); } SUBCASE("simple") { std::vector argv { "gcc", "test.c"}; argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); CHECK(args.has_option("verbose") == false); CHECK(args.has_option("version") == false); CHECK(args.has_option("include path") == false); CHECK(args.has_option("library path") == false); CHECK(args.has_option("library") == false); CHECK(args.has_option("output") == false); CHECK(args.count() == 1); CHECK(args.as(0) == "test.c"); } SUBCASE("simple 2") { std::vector argv { "gcc", "-I/usr/local/include", "test.c", "-otest"}; argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); CHECK(args.has_option("verbose") == false); CHECK(args.has_option("version") == false); CHECK(args.has_option("include path") == true); CHECK(args["include path"].count() == 1); CHECK(args["include path"].as() == "/usr/local/include"); CHECK(args.has_option("library path") == false); CHECK(args.has_option("library") == false); CHECK(args.has_option("output") == true); CHECK(args["output"].count() == 1); CHECK(args["output"].as() == "test"); CHECK(args.count() == 1); CHECK(args.as(0) == "test.c"); } SUBCASE("simple 3") { std::vector argv { "gcc", "-I/usr/local/include", "-I.", "-L/usr/local/lib", "-lz", "-lm", "test.c", "-otest"}; argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); CHECK(args.has_option("verbose") == false); CHECK(args.has_option("version") == false); CHECK(args.has_option("include path") == true); CHECK(args["include path"].count() == 2); CHECK(args["include path"][0].as() == "/usr/local/include"); CHECK(args["include path"][1].as() == "."); CHECK(args.has_option("library path") == true); CHECK(args["library path"].count() == 1); CHECK(args["library path"][0].as() == "/usr/local/lib"); CHECK(args.has_option("library") == true); CHECK(args["library"].count() == 2); CHECK(args["library"][0].as() == "z"); CHECK(args["library"][1].as() == "m"); CHECK(args.has_option("output") == true); CHECK(args["output"].count() == 1); CHECK(args["output"].as() == "test"); CHECK(args.count() == 1); CHECK(args.as(0) == "test.c"); } } TEST_CASE("argument conversions") { argagg::parser parser {{ {"number", {"-n", "--num", "--number"}, "number", 1}, }}; SUBCASE("positional integer") { std::vector argv { "test", "1", "2"}; argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); CHECK(args.pos.size() == 2); CHECK(args.as() == 1); CHECK(args.as() == 1); CHECK(args.as() == 1); CHECK(args.as() == 1); CHECK(args.as() == 1); CHECK(args.as() == 1); CHECK(args.as() == 1); CHECK(args.as() == 1); CHECK(args.as() == 1); CHECK(args.as() == 1); CHECK(args.as() == 1); CHECK(args.as() == 1); CHECK(args.as() == 1); CHECK(args.as() == 1); CHECK(args.as() == 1); CHECK(std::strcmp(args.as(), "1") == 0); CHECK(args.as(1) == 2); CHECK(args.as(1) == 2); CHECK(args.as(1) == 2); CHECK(args.as(1) == 2); CHECK(args.as(1) == 2); CHECK(args.as(1) == 2); CHECK(args.as(1) == 2); CHECK(args.as(1) == 2); CHECK(args.as(1) == 2); CHECK(args.as(1) == 2); CHECK(args.as(1) == 2); CHECK(args.as(1) == 2); CHECK(args.as(1) == 2); CHECK(args.as(1) == 2); CHECK(args.as(1) == 2); CHECK(args.as(1) == "2"); CHECK(std::strcmp(args.as(1), "2") == 0); } SUBCASE("positional floating point") { std::vector argv { "test", "3.141592653", "2.71828182846"}; argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); CHECK(args.pos.size() == 2); CHECK(args.as() == doctest::Approx(3.141592653f)); CHECK(args.as() == doctest::Approx(3.141592653)); CHECK(args.as() == "3.141592653"); CHECK(args.as(1) == doctest::Approx(2.71828182846f)); CHECK(args.as(1) == doctest::Approx(2.71828182846)); CHECK(args.as(1) == "2.71828182846"); } SUBCASE("positional vector") { std::vector argv { "test", "0", "1", "2"}; argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); CHECK(args.pos.size() == 3); auto v = args.all_as(); CHECK(v[0] == 0); CHECK(v[1] == 1); CHECK(v[2] == 2); } SUBCASE("option integer") { std::vector argv { "test", "-n", "1"}; argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); CHECK(args.has_option("number") == true); CHECK(args["number"].count() == 1); CHECK(args["number"].as() == 1); CHECK(args["number"].as() == 1); CHECK(args["number"].as() == 1); CHECK(args["number"].as() == 1); CHECK(args["number"].as() == 1); CHECK(args["number"].as() == 1); CHECK(args["number"].as() == 1); CHECK(args["number"].as() == 1); CHECK(args["number"].as() == 1); CHECK(args["number"].as() == 1); CHECK(args["number"].as() == 1); CHECK(args["number"].as() == 1); CHECK(args["number"].as() == 1); CHECK(args["number"].as() == 1); CHECK(args["number"].as() == 1); CHECK(args["number"].as() == "1"); } SUBCASE("option floating point") { std::vector argv { "test", "-n", "3.141592653"}; argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); CHECK(args.has_option("number") == true); CHECK(args["number"].count() == 1); CHECK(args["number"].as() == doctest::Approx(3.141592653f)); CHECK(args["number"].as() == doctest::Approx(3.141592653)); CHECK(args["number"].as() == "3.141592653"); } SUBCASE("option implicit conversions") { std::vector argv { "test", "-n", "3.141592653", "-n", "2"}; argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); CHECK(args.has_option("number") == true); CHECK(args["number"].count() == 2); float x = args["number"][0]; int y = args["number"][1]; CHECK(x == doctest::Approx(3.141592653f)); CHECK(y == 2); } SUBCASE("exception on bad conversion") { std::vector argv { "test", "-n", "not-an-number"}; argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); CHECK(args.has_option("number") == true); CHECK(args["number"].count() == 1); CHECK_THROWS_AS({ args["number"].as(); }, std::invalid_argument); CHECK_THROWS_AS({ args["number"].as(); }, std::invalid_argument); CHECK(args["number"].as(-1) == -1); CHECK(args["number"].as(3.141) == doctest::Approx(3.141)); } } // Define a custom conversion function for the test that follows namespace argagg { namespace convert { template <> std::vector arg(const char* s) { std::vector ret {}; if (std::strlen(s) == 0) { return ret; } while (true) { const char* token = std::strchr(s, ','); if (token == nullptr) { ret.emplace_back(s, std::strlen(s)); break; } std::size_t len = token - s; ret.emplace_back(s, len); s += len + 1; } return ret; } } // namespace convert } // namespace argagg TEST_CASE("custom conversion function") { argagg::parser parser {{ {"words", {"-w", "--words"}, "words", 1}, }}; std::vector argv { "test", "-w", "hello,world,foo,bar,baz"}; argagg::parser_results args = parser.parse(argv.size(), &(argv.front())); CHECK(args.has_option("words") == true); auto v = args["words"].as>(); CHECK(v.size() == 5); CHECK(v[0] == "hello"); CHECK(v[1] == "world"); CHECK(v[2] == "foo"); CHECK(v[3] == "bar"); CHECK(v[4] == "baz"); } TEST_CASE("write options help") { argagg::parser parser {{ {"help", {"-h", "--help"}, "print help", 0}, {"verbose", {"-v", "--verbose"}, "be verbose", 0}, {"output", {"-o", "--output"}, "output filename", 1}, }}; // Just checking for no exceptions for now. std::cout << parser; } static const std::string ipsum = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod " "tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam" ", quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo " "consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse " "cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat " "non proident, sunt in culpa qui officia deserunt mollit anim id est " "laborum."; #ifdef __unix__ static const std::string fmt_ipsum = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod\n" "tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim\n" "veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea\n" "commodo consequat. Duis aute irure dolor in reprehenderit in voluptate\n" "velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat\n" "cupidatat non proident, sunt in culpa qui officia deserunt mollit anim\n" "id est laborum.\n"; #else // #ifdef __unix__ static const std::string fmt_ipsum(ipsum); #endif // #ifdef __unix__ TEST_CASE("fmt_ostream") { std::ostringstream os; { argagg::fmt_ostream test(os); test << ipsum; } CHECK(os.str() == fmt_ipsum); } TEST_CASE("fmt_string") { std::string test_formatted = argagg::fmt_string(ipsum); CHECK(test_formatted == fmt_ipsum); }