Description
C++ library compare and manipulate versions are available as extensions to the ..-. format complying with Semantic Versioning 2.0.0
semver alternatives and similar libraries
Based on the "Containers" category.
Alternatively, view semver alternatives based on common mentions on social networks and blogs.
-
Hopscotch map
A fast header-only hash map which uses hopscotch hashing for collisions resolution. [MIT] -
LSHBOX
A c++ toolbox of locality-sensitive hashing (LSH), provides several popular LSH algorithms, also support Python and MATLAB. [GPL] -
function2
Improved and configurable drop-in replacement to std::function that supports move only types, multiple overloads and more -
C++ B-tree
A template library that implements ordered in-memory containers based on a B-tree data structure. [Apache2] -
Optional Argument in C++
Named optional arguments in C++17
Get performance insights in less than 4 minutes
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest. Visit our partner's website for more details.
Do you think we are missing an alternative of semver or a related project?
README
_____ _ _
/ ____| | | (_)
| (___ ___ _ __ ___ __ _ _ __ | |_ _ ___
\___ \ / _ \ '_ ` _ \ / _` | '_ \| __| |/ __|
____) | __/ | | | | | (_| | | | | |_| | (__
|_____/ \___|_| |_| |_|\__,_|_| |_|\__|_|\___|
__ __ _ _ _____
\ \ / / (_) (_) / ____|_ _
\ \ / /__ _ __ ___ _ ___ _ __ _ _ __ __ _ | | _| |_ _| |_
\ \/ / _ \ '__/ __| |/ _ \| '_ \| | '_ \ / _` | | | |_ _|_ _|
\ / __/ | \__ \ | (_) | | | | | | | | (_| | | |____|_| |_|
\/ \___|_| |___/_|\___/|_| |_|_|_| |_|\__, | \_____|
__/ |
|___/
C++ library compare and manipulate versions are available as extensions to the <major>.<minor>.<patch>-<prerelease_type>.<prerelease_number>
format complying with [Semantic Versioning 2.0.0](semver.org)
Features
- C++17
- Header-only
- Dependency-free
- Constexpr comparison: <, <=, ==, !=, > >=
- Constexpr from string
- Constexpr to string
[Examples](example/example.cpp)
- Create
constexpr version v1 = version{1, 2, 3, prerelease::rc, 4};
constexpr version v2 = v1;
- Сomparison
constexpr semver::version v1{1, 4, 3};
constexpr semver::version v2{1, 2, 4, semver::prerelease::alpha, 10};
static_assert(v1 != v2);
static_assert(v1 > v2);
static_assert(v1 >= v2);
static_assert(v2 < v1);
static_assert(v2 <= v1);
- To string
semver::version v{1, 2, 3, prerelease::rc, 4};
// To string.
std::string s1 = v.to_string(); // may throw.
// Non-member to string.
std::string s2 = semver::to_string(v); // may throw.
std::array<char, 32> str = {};
// constexpr to chars, like <https://en.cppreference.com/w/cpp/utility/to_chars>.
auto [p, ec] = v.to_chars(str.data(), str.data() + str.size()); // constexpr and no throw.
// Non-member constexpr to chars, like <https://en.cppreference.com/w/cpp/utility/to_chars>.
auto [p, ec] = semver::to_chars(str.data(), str.data() + str.size(), v); // constexpr and no throw.
- From string
std::string_view s = "1.2.3-rc.4";
// From chars.
semver::version v1{s}; // constexpr and may throw.
// User-defined literals '_version'.
semver::version v2 = "1.2.3-rc.4"_version; // constexpr and may throw.
// constexpr from_chars, like <https://en.cppreference.com/w/cpp/utility/from_chars>.
semver::version v3;
auto [p, ec] = v3.to_chars(str.data(), str.data() + str.size()); // constexpr and no throw.
// Non-member constexpr from chars, like <https://en.cppreference.com/w/cpp/utility/from_chars>.
semver::version v4;
auto [p, ec] = semver::to_chars(str.data(), str.data() + str.size(), v4); // constexpr and no throw.
// Non-member from string.
semver::version v5 = semver::from_string(s); // constexpr and may throw.
std::optional<version> v6 = semver::from_string_noexcept(s); // constexpr and no throw.
// From string.
semver::version v6;
v7.from_string(s); // constexpr and may throw.
bool success = v8.from_string_noexcept(s); // constexpr and no throw.
Integration
You should add required file [semver.hpp](include/semver.hpp).
If you are using vcpkg on your project for external dependencies, then you can use the neargye-semver package.
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.
)
Compiler compatibility
- Clang/LLVM >= 5
- MSVC++ >= 14.11 / Visual Studio >= 2017
- Xcode >= 10
- GCC >= 7
Licensed under the [MIT License](LICENSE)
*Note that all licence references and agreements mentioned in the semver README section above
are relevant to that project's source code only.