C++ library compare and manipulate versions are available as extensions to the <major>.<minor>.<patch>-<prerelease_tag>+<build_metadata>
format complying with Semantic Versioning 2.0.0
-
Parse
semver::version v1; if (semver::parse("1.4.3", v1)) { const int patch = v1.patch(); // 3 // do something... } semver::version v2; if (semver::parse("1.2.4-alpha.10")) { const std::string prerelease_tag = v2.prerelease_tag() // alpha.10 // do something... }
-
Сomparison
assert(v1 != v2); assert(v1 > v2); assert(v1 >= v2); assert(v2 < v1); assert(v2 <= v1);
-
Validate
const bool result = semver::valid("1.2.3-alpha+build"); assert(result);
-
Range matching
semver::range_set range; if (semver::parse(">=1.0.0 <2.0.0 || >3.2.1", range)) { semver::version version; if (semver::parse("1.2.3", version)) { assert(range.contains(version)); } }
Check the examples folder to see more various usage examples
You should add required file semver.hpp.
If you are using vcpkg on your project for external dependencies, then you can use the neargye-semver.
If you are using Conan to manage your dependencies, merely add neargye-semver/x.y.z
to your conan's requires, where x.y.z
is the release version you want to use.
Alternatively, you can use something like CPM which is based on CMake's Fetch_Content
module.
CPMAddPackage(
NAME semver
GITHUB_REPOSITORY Neargye/semver
GIT_TAG x.y.z # Where `x.y.z` is the release version you want to use.
)
- Clang/LLVM >= 5
- MSVC++ >= 14.11 / Visual Studio >= 2017
- Xcode >= 10
- GCC >= 7