aboutsummaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@gmail.com>2025-02-26 11:24:59 +0100
committerFelix Morgner <felix.morgner@gmail.com>2025-02-26 11:24:59 +0100
commit440d47cae6431de3332ac934b6056a970cc1a0d7 (patch)
treeaae63811972647f6ffe8a13d440171cfc8752860 /source
parent124d4f363a9d86b023aadec0eb0a3eb6fc1cbfdd (diff)
downloadnewtype-440d47cae6431de3332ac934b6056a970cc1a0d7.tar.xz
newtype-440d47cae6431de3332ac934b6056a970cc1a0d7.zip
build: remove conan
Diffstat (limited to 'source')
-rw-r--r--source/CMakeLists.txt19
-rw-r--r--source/doc/.gitignore2
-rw-r--r--source/doc/CMakeLists.txt81
-rw-r--r--source/doc/requirements.txt1
-rw-r--r--source/doc/src/conf.py48
-rw-r--r--source/doc/src/index.rst1271
-rw-r--r--source/examples/CMakeLists.txt15
-rw-r--r--source/examples/src/basic_usage.cpp39
-rw-r--r--source/examples/src/basic_usage_with_read.cpp37
-rw-r--r--source/examples/src/basic_usage_with_show.cpp39
-rw-r--r--source/lib/CMakeLists.txt16
-rw-r--r--source/lib/include/newtype/newtype.hpp753
-rw-r--r--source/tests/CMakeLists.txt33
-rw-r--r--source/tests/src/arithmetic.cpp297
-rw-r--r--source/tests/src/constructors.cpp102
-rw-r--r--source/tests/src/conversion.cpp133
-rw-r--r--source/tests/src/derivation_clause.cpp63
-rw-r--r--source/tests/src/equality_comparison.cpp102
-rw-r--r--source/tests/src/hash.cpp59
-rw-r--r--source/tests/src/io_operators.cpp110
-rw-r--r--source/tests/src/iterable.cpp1060
-rw-r--r--source/tests/src/relational_operators.cpp249
-rw-r--r--source/tests/src/threeway_comparison.cpp52
23 files changed, 0 insertions, 4581 deletions
diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt
deleted file mode 100644
index 984e085..0000000
--- a/source/CMakeLists.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-cmake_minimum_required(VERSION "3.25.0")
-
-project("newtype"
- LANGUAGES CXX
- DESCRIPTION "A library of types and functions to create strong type aliases"
-)
-
-enable_testing()
-
-# Project Options
-
-option(BUILD_EXAMPLES "Build the library examples" OFF)
-
-# Project Components
-
-add_subdirectory("doc")
-add_subdirectory("examples")
-add_subdirectory("lib")
-add_subdirectory("tests") \ No newline at end of file
diff --git a/source/doc/.gitignore b/source/doc/.gitignore
deleted file mode 100644
index ee826c1..0000000
--- a/source/doc/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-Pipfile
-Pipfile.lock
diff --git a/source/doc/CMakeLists.txt b/source/doc/CMakeLists.txt
deleted file mode 100644
index 7a9e27d..0000000
--- a/source/doc/CMakeLists.txt
+++ /dev/null
@@ -1,81 +0,0 @@
-find_package("Python3"
- REQUIRED
- COMPONENTS "Interpreter"
-)
-
-set(DOCENV_DIR "${PROJECT_BINARY_DIR}/docenv")
-
-if(NOT EXISTS "${DOCENV_DIR}")
- message(STATUS "Creating Python virtual environment")
- execute_process(COMMAND "${Python3_EXECUTABLE}"
- "-m"
- "venv"
- "${DOCENV_DIR}"
- OUTPUT_QUIET
- )
- message(STATUS "Installing documentation requirements")
- execute_process(COMMAND
- "${DOCENV_DIR}/bin/python"
- "-m"
- "pip"
- "install"
- "-r"
- "${CMAKE_CURRENT_SOURCE_DIR}/requirements.txt"
- OUTPUT_QUIET
- )
-else()
- message(STATUS "Reusing existing Python virtual environment")
-endif()
-
-file(GLOB SOURCES
- CONFIGURE_DEPENDS
- "${CMAKE_CURRENT_SOURCE_DIR}/src/*"
- "${PROJECT_SOURCE_DIR}/examples/src/*"
-)
-
-add_custom_target("docs"
- ALL
- DEPENDS
- "${CMAKE_CURRENT_BINARY_DIR}/html/index.html"
- "${CMAKE_CURRENT_BINARY_DIR}/man/newtype.3"
- WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
- COMMENT "Building documentation"
-)
-
-add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/html/index.html"
- COMMAND "${DOCENV_DIR}/bin/sphinx-build"
- "-q"
- "-b"
- "singlehtml"
- "-E"
- "${CMAKE_CURRENT_SOURCE_DIR}/src"
- "${CMAKE_CURRENT_BINARY_DIR}/html"
- DEPENDS ${SOURCES}
- WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
- COMMENT "Compiling HTML documentation"
-)
-
-add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/man/newtype.3"
- COMMAND "${DOCENV_DIR}/bin/sphinx-build"
- "-q"
- "-b"
- "man"
- "-E"
- "${CMAKE_CURRENT_SOURCE_DIR}/src"
- "${CMAKE_CURRENT_BINARY_DIR}/man"
- DEPENDS ${SOURCES}
- WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
- COMMENT "Compiling man page"
-)
-
-install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/singlehtml"
- TYPE DOC
- PATTERN ".doctrees" EXCLUDE
- PATTERN ".buildinfo" EXCLUDE
- PATTERN ".nojekyll" EXCLUDE
-)
-
-install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/man/"
- TYPE MAN
- PATTERN ".doctrees" EXCLUDE
-)
diff --git a/source/doc/requirements.txt b/source/doc/requirements.txt
deleted file mode 100644
index 47b0805..0000000
--- a/source/doc/requirements.txt
+++ /dev/null
@@ -1 +0,0 @@
-sphinx~=7.0
diff --git a/source/doc/src/conf.py b/source/doc/src/conf.py
deleted file mode 100644
index a6e65de..0000000
--- a/source/doc/src/conf.py
+++ /dev/null
@@ -1,48 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import os
-
-
-# -- Project information -----------------------------------------------------
-
-project = 'newtype'
-copyright = '2023, Felix Morgner'
-author = 'Felix Morgner'
-version = '2.0'
-release = '2.0.0'
-
-
-# -- General configuration ---------------------------------------------------
-
-master_doc = 'index'
-
-extensions = [
- 'sphinx.ext.todo',
- 'sphinx.ext.githubpages',
-]
-
-highlight_language = 'c++'
-
-pygments_style = 'tango'
-
-exclude_patterns = []
-
-numfig = True
-
-# -- Options for HTML output -------------------------------------------------
-
-html_theme = 'haiku'
-html_theme_options = {
-}
-
-# -- Options for manual page output -------------------------------------------------
-
-man_pages = [
- (
- "index",
- "newtype",
- "A library of types and functions to create strong type aliases",
- ["Felix Morgner <felix.morgner@gmail.com>"],
- 3,
- ),
-] \ No newline at end of file
diff --git a/source/doc/src/index.rst b/source/doc/src/index.rst
deleted file mode 100644
index 88925aa..0000000
--- a/source/doc/src/index.rst
+++ /dev/null
@@ -1,1271 +0,0 @@
-.. cpp:namespace-push:: nt
-
-.. |BaseTypeDoc| replace:: The type of the contained object
-.. |TagTypeDoc| replace:: A tag to uniquely identify an instance of :cpp:class:`nt::new_type`
-.. |DerivationClauseDoc| replace:: A (possibly empty) list of derivation tags as generated by :cpp:func:`nt::deriving`
-
-.. only:: html
-
- .. contents:: Table of Contents
- :depth: 5
-
-#############
-Documentation
-#############
-
-The ``newtype`` library provides types and functions to facilitate the creation of strong type aliases.
-
-Example Usage
-#############
-
-.. note::
-
- All examples shown in this section can be found in the directory :literal:`examples/src` within the source root.
-
-:ref:`new-type-usage-basic` below illustrates the basic usage of :cpp:class:`new_type`.
-In it, :cpp:class:`new_type` is used to create three new strong aliases :literal:`Width`, :literal:`Height`, and :literal:`Area`, all aliasing :literal:`unsigned int`.
-
-.. literalinclude:: ../../examples/src/basic_usage.cpp
- :language: c++
- :linenos:
- :name: new-type-usage-basic
- :caption: Basic usage of :cpp:class:`new_type`
-
-However, using :cpp:class:`new_type` in this fashion is quite cumbersome.
-Starting from the bottom, :literal:`unsigned int` can normally be shifted on to any :cpp:class:`std::basic_ostream`, like :cpp:var:`std::cout` in this example.
-Since printing values, among others, is a common use case, ``newtype`` provides facilities to support automatic derivation of supporting functions.
-
-.. literalinclude:: ../../examples/src/basic_usage_with_show.cpp
- :emphasize-lines: 7,38
- :language: c++
- :linenos:
- :name: new-type-usage-basic-show
- :caption: Improved usability using the :cpp:var:`Show` derivation tag
-
-:ref:`new-type-usage-basic-show` illustrates how the function template :cpp:func:`deriving` can be used to enable automatic derivation of the stream output operator for :literal:`Area`.
-Similarly, it is possible to derive the stream input operators of :literal:`Width` and :literal:`Height`, as shown in :ref:`new-type-usage-basic-read` below.
-
-.. literalinclude:: ../../examples/src/basic_usage_with_read.cpp
- :emphasize-lines: 5,6,29,30,32
- :language: c++
- :linenos:
- :name: new-type-usage-basic-read
- :caption: Deriving input operations using the :cpp:var:`Read` derivation tag
-
-API
-###
-
-This section of the documentation describes the public API of the *new_type*.
-It provides detailed descriptions of the types and functions designed to be used by applications.
-All declarations described in this section are found in the namespace :cpp:any:`nt`, unless noted otherwise.
-
-Header :literal:`<newtype/new_type.hpp>`
-========================================
-
-This header contains the definitions of the class template :cpp:class:`new_type` as well as a set of associated namespace-level functions.
-
-Class template :cpp:class:`new_type`
-------------------------------------
-
-.. cpp:class:: template<typename BaseType, typename TagType, auto DerivationClause = deriving()> \
- new_type
-
- The class template :cpp:class:`new_type` is designed to allow the creation of new types based on existing types.
- Similarly to the newtype keyword in Haskell, this class template creates a new type that is layout equivalent to the underlying type.
- During creation of the of new strong type, features can be derived using :cpp:any:`nt::deriving`.
- Actual feature availability depends on the :cpp:any:`BaseType` chosen for :cpp:class:`new_type` instance.
- For example, deriving :cpp:any:`nt::Show` for a :cpp:class:`new_type` instance over a type not supporting output on a standard output stream, will not cause the instance to be output-streamable.
-
- :tparam BaseType: |BaseTypeDoc|
- :tparam TagType: |TagTypeDoc|
- :tparam DerivationClause: |DerivationClauseDoc|
-
- .. versionadded:: 1.0.0
-
- **Member Type Aliases**
-
- .. cpp:type:: base_type = BaseType
-
- .. cpp:type:: tag_type = TagType
-
- .. cpp:type:: derivation_clause_type = decltype(DerivationClause)
-
- .. cpp:type:: iterator = typename BaseType::iterator
-
- :enablement: This type alias is defined iff. this :cpp:class:`new_type`'s :cpp:type:`base_type` has a member type :cpp:type:`iterator <new_type::base_type::iterator>` and the :cpp:var:`derivation clause <derivation_clause>` contains :cpp:var:`Iterable`.
-
- .. versionadded:: 1.1.0
-
- .. cpp:type:: const_iterator = typename BaseType::const_iterator
-
- :enablement: This type alias is defined iff. this :cpp:class:`new_type`'s :cpp:type:`base_type` has a member type :cpp:type:`const_iterator <new_type::base_type::const_iterator>` and the :cpp:var:`derivation clause <derivation_clause>` contains :cpp:var:`Iterable`.
-
- .. versionadded:: 1.1.0
-
- .. cpp:type:: reverse_iterator = typename BaseType::reverse_iterator
-
- :enablement: This type alias is defined iff. this :cpp:class:`new_type`'s :cpp:type:`base_type` has a member type :cpp:type:`reverse_iterator <new_type::base_type::reverse_iterator>` and the :cpp:var:`derivation clause <derivation_clause>` contains :cpp:var:`Iterable`.
-
- .. versionadded:: 1.1.0
-
- .. cpp:type:: const_reverse_iterator = typename BaseType::const_reverse_iterator
-
- :enablement: This type alias is defined iff. this :cpp:class:`new_type`'s :cpp:type:`base_type` has a member type :cpp:type:`const_reverse_iterator <new_type::base_type::const_reverse_iterator>` and the :cpp:var:`derivation clause <derivation_clause>` contains :cpp:var:`Iterable`.
-
- .. versionadded:: 1.1.0
-
- **Static Data Members**
-
- .. cpp:var:: static derivation_clause_type constexpr derivation_clause = DerivationClause
-
- **Constructors**
-
- .. cpp:function:: constexpr new_type() noexcept(std::is_nothrow_default_constructible_v<base_type>)
-
- Construct a new instance of this :cpp:class:`new_type` by default constructing the contained object.
-
- :throws: Any exception thrown by the default constructor of this :cpp:class:`new_type`'s :cpp:type:`base_type`.
- This constructor is noexcept iff. this :cpp:class:`new_type`'s :cpp:type:`base_type` is *nothrow default-construtible*.
- :enablement: This constructor is defined as :cpp:expr:`= default` iff. this :cpp:class:`new_type`'s :cpp:type:`base_type` is *default-construtible*.
- Otherwise, this constructor is declared as explicitely deleted.
-
- .. cpp:function:: constexpr new_type(new_type const & other) noexcept(std::is_nothrow_copy_constructible_v<base_type>)
-
- Construct a new instance of this :cpp:class:`new_type` by copy-constructing the contained object using the value contained by :cpp:any:`other`.
-
- :param other: An existing instance of this :cpp:class:`new_type`
- :throws: Any exception thrown by the copy-constructor of this :cpp:class:`new_type`'s :cpp:type:`base_type`.
- This constructor shall be noexcept iff. this :cpp:class:`new_type`'s :cpp:type:`base_type` is *nothrow copy-construtible*.
- :enablement: This constructor shall be defined as :literal:`= default` iff. this :cpp:class:`new_type`'s :cpp:type:`base_type` is *copy-construtible*.
- Otherwise, this constructor shall be explicitely deleted.
-
- .. cpp:function:: constexpr new_type(new_type && other)
-
- Construct a new instance of this :cpp:class:`new_type` by move-constructing the contained object using the value contained by :literal:`other`.
-
- :param other: An existing instance of this :cpp:class:`new_type`
- :throws: Any exception thrown by the move-constructor of this :cpp:class:`new_type`'s :cpp:type:`base_type`.
- This constructor shall be noexcept iff. this :cpp:class:`new_type`'s :cpp:type:`base_type` is *nothrow move-construtible*.
- :enablement: This constructor shall be defined as :literal:`= default` iff. this :cpp:class:`new_type`'s :cpp:type:`base_type` is *move-construtible*.
- Otherwise, this constructor shall be explicitely deleted.
-
- .. cpp:function:: constexpr new_type(BaseType const & value)
-
- Construct a new instance of this :cpp:class:`new_type` by copy-constructing the contained object using :literal:`value`.
-
- :param value: An existing instance of this :cpp:class:`new_type`
- :throws: Any exception thrown by the copy-constructor of this :cpp:class:`new_type`'s :cpp:type:`base_type`.
- This constructor shall be noexcept iff. this :cpp:class:`new_type`'s :cpp:type:`base_type` is *nothrow copy-construtible*.
- :enablement: This constructor shall be defined as :literal:`= default` iff. this :cpp:class:`new_type`'s :cpp:type:`base_type` is *copy-construtible*.
- Otherwise, this constructor shall be explicitely deleted.
-
- .. cpp:function:: constexpr new_type(BaseType && value)
-
- Construct a new instance of this :cpp:class:`new_type` by move-constructing the contained object using :literal:`value`.
-
- :param value: An existing instance of this :cpp:class:`new_type`
- :throws: Any exception thrown by the move-constructor of this :cpp:class:`new_type`'s :cpp:type:`base_type`.
- This constructor shall be noexcept iff. this :cpp:class:`new_type`'s :cpp:type:`base_type` is *nothrow move-construtible*.
- :enablement: This constructor shall be defined as :literal:`= default` iff. this :cpp:class:`new_type`'s :cpp:type:`base_type` is *move-construtible*.
- Otherwise, this constructor shall be explicitely deleted.
-
- **Assignment Operators**
-
- .. cpp:function:: constexpr new_type & operator=(new_type const & other)
-
- Copy the value of an existing instance of this :cpp:class:`new_type` and replace this instance's value
-
- :param other: An existing instance of this :cpp:class:`new_type`
- :throws: Any exception thrown by the copy-assignment operator of this :cpp:class:`new_type`'s :cpp:type:`base_type`.
- This operator shall be noexcept iff. this :cpp:class:`new_type`'s :cpp:type:`base_type` is *nothrow copy-assignable*.
- :enablement: This operator shall be defined as :literal:`= default` iff. this :cpp:class:`new_type`'s :cpp:type:`base_type` is *copy-assignable*.
- Otherwise, this operator shall be explicitely deleted.
-
- .. cpp:function:: constexpr new_type & operator=(new_type && other)
-
- Move the value of an existing instance of this :cpp:class:`new_type` and replace this instance's value
-
- :param other: An existing instance of this :cpp:class:`new_type`
- :throws: Any exception thrown by the move-assignment operator of this :cpp:class:`new_type`'s :cpp:type:`base_type`.
- This operator shall be noexcept iff. this :cpp:class:`new_type`'s :cpp:type:`base_type` is *nothrow move-assignable*.
- :enablement: This operator shall be defined as :literal:`= default` iff. this :cpp:class:`new_type`'s :cpp:type:`base_type` is *move-assignable*.
- Otherwise, this operator shall be explicitely deleted.
-
- **Accessors**
-
- .. cpp:function:: constexpr BaseType decay() const
-
- Retrieve a copy of the object contained by this :cpp:class:`new_type` object
-
- :throws: Any exception thrown by the copy-constructor of this :cpp:class:`new_type`'s :cpp:type:`base_type`.
- This operator shall be noexcept iff. this :cpp:class:`new_type`'s :cpp:type:`base_type` is *nothrow copy-constructible*.
-
- .. cpp:function:: constexpr operator BaseType() const
-
- Retrieve a copy of the object contained by this :cpp:class:`new_type` object
-
- :throws: Any exception thrown by the copy-constructor of this :cpp:class:`new_type`'s :cpp:type:`base_type`.
- This operator shall be noexcept iff. this :cpp:class:`new_type`'s :cpp:type:`base_type` is *nothrow copy-constructible*.
- :explicit: This conversion operator shall be explicit unless this :cpp:class:`new_type`'s :cpp:var:`derivation clause <derivation_clause>` contains :cpp:var:`ImplicitConversion`.
-
- **Member Access Through Pointer**
-
- .. cpp:function:: constexpr BaseType operator->() noexcept
-
- Perform "member access through pointer" via a pointer to object contained by this :cpp:class:`new_type`
-
- :enablement: This operator shall be available iff. this :cpp:class:`new_type`'s :cpp:var:`derivation clause <derivation_clause>` contains :cpp:var:`Indirection`
-
- .. cpp:function:: constexpr BaseType const * operator->() const noexcept
-
- Perform "member access through pointer" via a pointer to object contained by this :cpp:class:`new_type`
-
- :enablement: This operator shall be available iff. this :cpp:class:`new_type`'s :cpp:var:`derivation clause <derivation_clause>` contains :cpp:var:`Indirection`
-
- **Iterators**
-
- .. cpp:function:: constexpr iterator begin()
-
- Get an iterator to the beginning of the object contained by this :cpp:class:`new_type`
-
- :enablement: This function shall be available iff.
-
- a) this :cpp:class:`new_type`'s :cpp:var:`derivation clause <derivation_clause>` contains :cpp:var:`Iterable` and
- b) this :cpp:class:`new_type`'s :cpp:type:`base type <base_type>` has a non-static member function :cpp:func:`begin() <new_type::base_type::begin()>` that returns an instance of type :cpp:type:`iterator`
-
- .. versionadded:: 1.1.0
-
- .. cpp:function:: constexpr iterator begin() const
-
- Get a constant iterator to the beginning of the object contained by this :cpp:class:`new_type`
-
- :enablement: This function shall be available iff.
-
- a) this :cpp:class:`new_type`'s :cpp:var:`derivation clause <derivation_clause>` contains :cpp:var:`Iterable` and
- b) this :cpp:class:`new_type`'s :cpp:type:`base type <base_type>` has a non-static member function :cpp:func:`begin() const <new_type::base_type::begin()>` that returns an instance of type :cpp:type:`const_iterator`
-
- .. versionadded:: 1.1.0
-
- .. cpp:function:: constexpr iterator cbegin() const
-
- Get a constant iterator to the beginning of the object contained by this :cpp:class:`new_type`
-
- :enablement: This function shall be available iff.
-
- a) this :cpp:class:`new_type`'s :cpp:var:`derivation clause <derivation_clause>` contains :cpp:var:`Iterable` and
- b) this :cpp:class:`new_type`'s :cpp:type:`base type <base_type>` has a non-static member function :cpp:func:`cbegin() const <new_type::base_type::cbegin()>` that returns an instance of type :cpp:type:`const_iterator`
-
- .. versionadded:: 1.1.0
-
- .. cpp:function:: constexpr iterator rbegin()
-
- Get a reverse iterator to the beginning of the object contained by this :cpp:class:`new_type`
-
- :enablement: This function shall be available iff.
-
- a) this :cpp:class:`new_type`'s :cpp:var:`derivation clause <derivation_clause>` contains :cpp:var:`Iterable` and
- b) this :cpp:class:`new_type`'s :cpp:type:`base type <base_type>` has a non-static member function :cpp:func:`rbegin() <new_type::base_type::rbegin()>` that returns an instance of type :cpp:type:`reverse_iterator`
-
- .. versionadded:: 1.1.0
-
- .. cpp:function:: constexpr iterator rbegin() const
-
- Get a constant reverse iterator to the beginning of the object contained by this :cpp:class:`new_type`
-
- :enablement: This function shall be available iff.
-
- a) this :cpp:class:`new_type`'s :cpp:var:`derivation clause <derivation_clause>` contains :cpp:var:`Iterable` and
- b) this :cpp:class:`new_type`'s :cpp:type:`base type <base_type>` has a non-static member function :cpp:func:`rbegin() const <new_type::base_type::rbegin()>` that returns an instance of type :cpp:type:`const_reverse_iterator`
-
- .. versionadded:: 1.1.0
-
- .. cpp:function:: constexpr iterator crbegin() const
-
- Get a constant reverse iterator to the beginning of the object contained by this :cpp:class:`new_type`
-
- :enablement: This function shall be available iff.
-
- a) this :cpp:class:`new_type`'s :cpp:var:`derivation clause <derivation_clause>` contains :cpp:var:`Iterable` and
- b) this :cpp:class:`new_type`'s :cpp:type:`base type <base_type>` has a non-static member function :cpp:func:`crbegin() const <new_type::base_type::crbegin()>` that returns an instance of type :cpp:type:`const_reverse_iterator`
-
- .. versionadded:: 1.1.0
-
- .. cpp:function:: constexpr iterator end()
-
- Get an iterator beyond the end of the object contained by this :cpp:class:`new_type`
-
- :enablement: This function shall be available iff.
-
- a) this :cpp:class:`new_type`'s :cpp:var:`derivation clause <derivation_clause>` contains :cpp:var:`Iterable` and
- b) this :cpp:class:`new_type`'s :cpp:type:`base type <base_type>` has a non-static member function :cpp:func:`end() <new_type::base_type::end()>` that returns an instance of type :cpp:type:`iterator`
-
- .. versionadded:: 1.1.0
-
- .. cpp:function:: constexpr iterator end() const
-
- Get a constant iterator beyond the end of the object contained by this :cpp:class:`new_type`
-
- :enablement: This function shall be available iff.
-
- a) this :cpp:class:`new_type`'s :cpp:var:`derivation clause <derivation_clause>` contains :cpp:var:`Iterable` and
- b) this :cpp:class:`new_type`'s :cpp:type:`base type <base_type>` has a non-static member function :cpp:func:`end() const <new_type::base_type::end()>` that returns an instance of type :cpp:type:`const_iterator`
-
- .. versionadded:: 1.1.0
-
- .. cpp:function:: constexpr iterator cend() const
-
- Get a constant iterator beyond the end of the object contained by this :cpp:class:`new_type`
-
- :enablement: This function shall be available iff.
-
- a) this :cpp:class:`new_type`'s :cpp:var:`derivation clause <derivation_clause>` contains :cpp:var:`Iterable` and
- b) this :cpp:class:`new_type`'s :cpp:type:`base type <base_type>` has a non-static member function :cpp:func:`cend() const <new_type::base_type::cend()>` that returns an instance of type :cpp:type:`const_iterator`
-
- .. versionadded:: 1.1.0
-
- .. cpp:function:: constexpr iterator rend()
-
- Get a reverse iterator beyond the end of the object contained by this :cpp:class:`new_type`
-
- :enablement: This function shall be available iff.
-
- a) this :cpp:class:`new_type`'s :cpp:var:`derivation clause <derivation_clause>` contains :cpp:var:`Iterable` and
- b) this :cpp:class:`new_type`'s :cpp:type:`base type <base_type>` has a non-static member function :cpp:func:`rend() <new_type::base_type::rend()>` that returns an instance of type :cpp:type:`reverse_iterator`
-
- .. versionadded:: 1.1.0
-
- .. cpp:function:: constexpr iterator rend() const
-
- Get a constant reverse iterator beyond the end of the object contained by this :cpp:class:`new_type`
-
- :enablement: This function shall be available iff.
-
- a) this :cpp:class:`new_type`'s :cpp:var:`derivation clause <derivation_clause>` contains :cpp:var:`Iterable` and
- b) this :cpp:class:`new_type`'s :cpp:type:`base type <base_type>` has a non-static member function :cpp:func:`rend() const <new_type::base_type::rend()>` that returns an instance of type :cpp:type:`const_reverse_iterator`
-
- .. versionadded:: 1.1.0
-
- .. cpp:function:: constexpr iterator crend() const
-
- Get a constant reverse iterator beyond the end of the object contained by this :cpp:class:`new_type`
-
- :enablement: This function shall be available iff.
-
- a) this :cpp:class:`new_type`'s :cpp:var:`derivation clause <derivation_clause>` contains :cpp:var:`Iterable` and
- b) this :cpp:class:`new_type`'s :cpp:type:`base type <base_type>` has a non-static member function :cpp:func:`crend() const <new_type::base_type::crend()>` that returns an instance of type :cpp:type:`const_reverse_iterator`
-
- .. versionadded:: 1.1.0
-
-:literal:`namespace`-level functions and function templates
------------------------------------------------------------
-
-The functions and functions templates described in this section provide additional functionality for the class template :cpp:class:`new_type` that is not part of the class itself.
-
-Equality Comparison Operators
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. cpp:function:: template<typename BaseType, typename TagType, auto DerivationClause> \
- constexpr bool operator==(new_type<BaseType, TagType, DerivationClause> const & lhs, new_type<BaseType, TagType, DerivationClause> const & rhs)
-
- Check two instances of :cpp:class:`new_type\<BaseType, TagType, DerivationClause>` for equality.
-
- :tparam BaseType: |BaseTypeDoc|
- :tparam TagType: |TagTypeDoc|
- :tparam DerivationClause: |DerivationClauseDoc|
- :param lhs: The left-hand side of the comparison
- :param rhs: The right-hand side of the comparison
- :returns: The value returned by the comparison of the contained objects.
- :throws: Any exception thrown by the comparison operator of objects contained by :literal:`lhs` and :literal:`rhs`.
- This operator shall be noexcept iff. :cpp:type:`new_type::base_type` is *nothrow equals-comparable*.
- :enablement: This operator shall be available iff. :cpp:type:`new_type::base_type` supports comparison using :literal:`==`
-
- .. versionadded:: 1.0.0
-
-.. cpp:function:: template<typename BaseType, typename TagType, auto DerivationClause> \
- constexpr bool operator==(new_type<BaseType, TagType, DerivationClause> const & lhs, BaseType const & rhs)
-
- Check an instance of :cpp:class:`new_type\<BaseType, TagType, DerivationClause>` for equality with an instance of :cpp:type:`BaseType`.
-
- :tparam BaseType: |BaseTypeDoc|
- :tparam TagType: |TagTypeDoc|
- :tparam DerivationClause: |DerivationClauseDoc|
- :param lhs: The left-hand side of the comparison
- :param rhs: The right-hand side of the comparison
- :returns: The value returned by the comparison of object contained by :literal:`lhs` with an object of the :cpp:type:`base type <new_type::base_type>`.
- :throws: Any exception thrown by the comparison of object contained by :literal:`lhs` with an object of the :cpp:type:`base type <new_type::base_type>`. This operator shall be noexcept iff. :cpp:type:`new_type::base_type` is *nothrow equals-comparable*.
- :enablement: This operator shall be available iff.
-
- a. :cpp:type:`new_type::base_type` supports comparison using :literal:`==` and
- b. the :cpp:var:`derivation clause <DerivationClause>` contains :cpp:var:`EqBase`
-
- .. versionadded:: 1.0.0
-
-.. cpp:function:: template<typename BaseType, typename TagType, auto DerivationClause> \
- constexpr bool operator==(BaseType const & lhs, new_type<BaseType, TagType, DerivationClause> const & rhs)
-
- Check an instance of :cpp:type:`BaseType` for equality with an instance of :cpp:class:`new_type\<BaseType, TagType, DerivationClause>`.
-
- :tparam BaseType: |BaseTypeDoc|
- :tparam TagType: |TagTypeDoc|
- :tparam DerivationClause: |DerivationClauseDoc|
- :param lhs: The left-hand side of the comparison
- :param rhs: The right-hand side of the comparison
- :returns: The value returned by the comparison of an object of :cpp:type:`base type <new_type::base_type>` with the object contained by :literal:`rhs`.
- :throws: Any exception thrown by the comparison of an object of :cpp:type:`base type <new_type::base_type>` with the object contained by :literal:`rhs`. This operator shall be noexcept iff. :cpp:type:`new_type::base_type` is *nothrow equals-comparable*.
- :enablement: This operator shall be available iff.
-
- a. :cpp:type:`new_type::base_type` supports comparison using :literal:`==` and
- b. the :cpp:var:`derivation clause <DerivationClause>` contains :cpp:var:`EqBase`
-
- .. versionadded:: 1.0.0
-
-.. cpp:function:: template<typename BaseType, typename TagType, auto DerivationClause> \
- constexpr bool operator!=(new_type<BaseType, TagType, DerivationClause> const & lhs, new_type<BaseType, TagType, DerivationClause> const & rhs)
-
- Check two instances of :cpp:class:`new_type\<BaseType, TagType, DerivationClause>` for in-equality.
-
- :tparam BaseType: |BaseTypeDoc|
- :tparam TagType: |TagTypeDoc|
- :tparam DerivationClause: |DerivationClauseDoc|
- :param lhs: The left-hand side of the comparison
- :param rhs: The right-hand side of the comparison
- :returns: The value returned by the comparison of the contained objects.
- :throws: Any exception thrown by the comparison operator of theobjects contained by :literal:`lhs` and :literal:`rhs`.
- This operator shall be noexcept iff. :cpp:type:`new_type::base_type` is *nothrow not-equals-comparable*.
- :enablement: This operator shall be available iff. :cpp:type:`new_type::base_type` supports comparison using :literal:`!=`
-
- .. versionadded:: 1.0.0
-
-.. cpp:function:: template<typename BaseType, typename TagType, auto DerivationClause> \
- constexpr bool operator!=(new_type<BaseType, TagType, DerivationClause> const & lhs, BaseType const & rhs)
-
- Check an instance of :cpp:class:`new_type\<BaseType, TagType, DerivationClause>` for in-equality with an instance of :cpp:type:`BaseType`.
-
- :tparam BaseType: |BaseTypeDoc|
- :tparam TagType: |TagTypeDoc|
- :tparam DerivationClause: |DerivationClauseDoc|
- :param lhs: The left-hand side of the comparison
- :param rhs: The right-hand side of the comparison
- :returns: The value returned by the comparison of the object contained by :literal:`lhs` with an object of the :cpp:type:`base type <new_type::base_type>`.
- :throws: Any exception thrown by the comparison of the object contained by :literal:`lhs` with an object of the :cpp:type:`base type <new_type::base_type>`.
- This operator shall be noexcept iff. :cpp:type:`new_type::base_type` is *nothrow not-equals-comparable*.
- :enablement: This operator shall be available iff.
-
- a) :cpp:type:`new_type::base_type` supports comparison using :literal:`!=` and
- b) the :cpp:var:`derivation clause <DerivationClause>` contains :cpp:var:`EqBase`
-
- .. versionadded:: 1.0.0
-
-.. cpp:function:: template<typename BaseType, typename TagType, auto DerivationClause> \
- constexpr bool operator!=(BaseType const & lhs, new_type<BaseType, TagType, DerivationClause> const & rhs)
-
- Check an instance of :cpp:type:`BaseType` for in-equality with an instance of :cpp:class:`new_type\<BaseType, TagType, DerivationClause>`.
-
- :tparam BaseType: |BaseTypeDoc|
- :tparam TagType: |TagTypeDoc|
- :tparam DerivationClause: |DerivationClauseDoc|
- :param lhs: The left-hand side of the comparison
- :param rhs: The right-hand side of the comparison
- :returns: The value returned by the comparison of an object of :cpp:type:`base type <new_type::base_type>` with the object contained by :literal:`rhs`.
- :throws: Any exception thrown by the comparison of an object of :cpp:type:`base type <new_type::base_type>` with the object contained by :literal:`rhs`. This operator shall be noexcept iff. :cpp:type:`new_type::base_type` is *nothrow not-equals-comparable*.
- :enablement: This operator shall be available iff.
-
- a. :cpp:type:`new_type::base_type` supports comparison using :literal:`!=` and
- b. the :cpp:var:`derivation clause <DerivationClause>` contains :cpp:var:`EqBase`
-
- .. versionadded:: 1.0.0
-
-Relational Comparison Operators
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. cpp:function:: template<typename BaseType, typename TagType, auto DerivationClause> \
- constexpr bool operator<(new_type<BaseType, TagType, DerivationClause> const & lhs, new_type<BaseType, TagType, DerivationClause> const & rhs)
-
- Compare two instances of the same :cpp:class:`new_type` using :literal:`<` (*less-than*).
-
- :tparam BaseType: |BaseTypeDoc|
- :tparam TagType: |TagTypeDoc|
- :tparam DerivationClause: |DerivationClauseDoc|
- :param lhs: The left-hand side of the comparison
- :param rhs: The right-hand side of the comparison
- :returns: The value returned by the comparison of the contained objects.
- :throws: Any exception thrown by the comparison operator of the objects contained by :literal:`lhs` and :literal:`rhs`.
- This operator shall be noexcept iff. :cpp:type:`new_type