Skip to content

A library of types and functions to create strong type aliases

License

Notifications You must be signed in to change notification settings

fmorgner/newtype

Folders and files

NameName
Last commit message
Last commit date

Latest commit

d9ab9b5 · Feb 26, 2025
Feb 26, 2025
Feb 26, 2025
Feb 26, 2025
Feb 26, 2025
Feb 26, 2025
Dec 22, 2019
Feb 26, 2025
Jun 7, 2023
Feb 21, 2020
Feb 26, 2025
Feb 26, 2025
Jun 9, 2023
Jan 5, 2020
Feb 22, 2020

Repository files navigation

newtype

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

C++20 GitHub license Documentation Status travis Download the latest version on conan Support 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<unsigned int, struct width_tag, deriving(nt::Read)>;
using Height = nt::new_type<unsigned int, struct height_tag, deriving(nt::Read)>;
using Area = nt::new_type<unsigned int, struct area_tag, deriving(nt::Show)>;

struct Rectangle
{
  constexpr Rectangle(Width w, Height h)
      : width{w}
      , height{h}
  {
  }

  auto constexpr area() const noexcept -> Area
  {
    return {width.decay() * height.decay()};
  }

private:
  Width width;
  Height height;
};

int main()
{
  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

License

Stars

Watchers

Forks

Packages

No packages published