| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| SHA256SUMS | 2026-10-24 | 167 Bytes | |
| tclap-1.6.0.tar.gz | 2026-10-24 | 7.1 MB | |
| tclap-1.6.0.zip | 2026-10-24 | 7.7 MB | |
| README.md | 2026-10-24 | 3.5 kB | |
| TCLAP 1.6.0 source code.tar.gz | 2026-10-24 | 245.4 kB | |
| TCLAP 1.6.0 source code.zip | 2026-10-24 | 409.1 kB | |
| Totals: 6 Items | 15.5 MB | 30 | |
TCLAP 1.6.0 - changes since 1.4.0
This summary compares TCLAP 1.6.0 with the v1.4.0 tag. TCLAP remains a header-only library with the 1.4-style API. Use TCLAP 1.4 for C++98 projects; TCLAP 1.6 requires C++20 and a standard library providing std::format.
C++20 modernization
- Internals use concepts, range algorithms, move semantics and smart-pointer ownership. Standard output formatting uses std::format. Constructors take selected string parameters by value and move them into owned storage.
- Query functions gain [[nodiscard]], and applicable accessors gain noexcept or constexpr. Copy prevention uses deleted operations, virtual overrides are explicit, and trivial special members use their default definitions.
- CMake's TCLAP::TCLAP target propagates cxx_std_20 to both build-tree and installed consumers. Direct compiler and pkg-config users must select C++20 themselves. CMake still requires version 3.13 or later.
Constraints and custom types
- PredicateConstraint<t> now defaults to std::function<bool(const t&)> instead of a function pointer. MakeConstraint and MakeRuleConstraint deduce and own callable types, copying lvalues and moving rvalues, including lambdas with move-only captures. Bind the result to a named local that outlives arguments borrowing it; moving it does not retarget those arguments.
- Predicate invocation uses std::invoke. Null member pointers and empty std::function objects are rejected with std::invalid_argument, in addition to null function pointers. Predicates must satisfy std::predicate when invoked through a const callable with const T&; text policies must return descriptions and short IDs convertible to std::string.
- Comparison constraints copy lvalue bounds and move rvalue bounds, including move-only state. RangeConstraint takes its bounds by value and moves them into storage. These constraints require totally ordered value types with ostream insertion; custom types with only a subset of comparison operators need adapting to satisfy std::totally_ordered.
- ValueArg and MultiArg extraction is constrained to stream-extractable types or types explicitly using the StringLike trait. ValuesConstraint requires ostream insertion for its help text and uses std::ranges::find for lookup; custom equality must meet that algorithm's C++20 requirements.
Compatibility and packaging
- Ordinary 1.4-style argument construction, registration, getValue(), visitors and parse() calls remain available.
- Custom overrides of functions now declared noexcept must preserve that exception guarantee. Code relying on exact constructor/function-pointer signatures or the PredicateConstraint default callable type may need adapting; ignored query results can produce new compiler warnings.
- Generated configuration headers expose TCLAP_VERSION_PATCH alongside the major and minor macros. Installed CMake version checks accept compatible requests within the same major version and reject other major versions.
- Documentation, examples and CI select the 1.6 API and C++20 requirements. Two additional unit-test executables cover modern callable and ordered constraint behavior beyond the suite shipped with 1.4.0.