Skip to content

Repository files navigation

newtype

The newtype library provides types and functions to facilitate the creation of strong type aliases.

C++20GitHub licenseDocumentation StatustravisDownload the latest version on conanSupport the project with Bitcoin

Usage

The code block below demonstrates the basic usage and features of newtype. For a more details description of the library, as well as a full API documentation, please read the docs (also available as a PDF file).

#include<newtype/derivable.hpp>
#include<newtype/deriving.hpp>
#include<newtype/new_type.hpp>
#include<iostream>using Width = nt::new_type<unsignedint, structwidth_tag, deriving(nt::Read)>;
using Height = nt::new_type<unsignedint, structheight_tag, deriving(nt::Read)>;
using Area = nt::new_type<unsignedint, structarea_tag, deriving(nt::Show)>;
structRectangle
{
constexprRectangle(Width w, Height h)
: width{w}
, height{h}
{
}
autoconstexprarea() constnoexcept -> Area
{
return {width.decay() * height.decay()};
}
private:
Width width;
Height height;
};
intmain()
{
auto width = Width{};
auto height = Height{};
std::cin >> width >> height;
auto rect = Rectangle{width, height};
std::cout << rect.area() << '\n';
}

Requirements

This library uses features of C++20 and thus requires a modern compiler. All development was done on GCC 9.2. This is a header-only library, and thus no compilation is need if you want to use it in your project. If you want to run the sanity-checks/unit-test, you will need at least CMake 3.9.0. If you want to build to documentation, you will need either a local installation of sphinx, or alternatively pipenv. A Pipfile is provided in the directory docs within the source root.

About

A library of types and functions to create strong type aliases

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages