
<!-- I release these notes into the public domain -->

# C++ Language Library (`lang`)

## Table of Contents

<!-- TOC -->
* [Home](./CONTENTS.md#planning-documentation-for-fennec)
* [C++ Language Library](#c-language-library-lang)
  * [Table of Contents](#table-of-contents)
  * [Introduction](#introduction)
  * [Implementation](#implementation)
    * [Diagnostics](#diagnostics)
    * [Utility](#utility)
    * [Primary Types](#primary-types)
    * [Composite Types](#composite-types)
    * [Type Properties](#type-properties)
    * [Supported Operations](#supported-operations)
    * [Property Queries](#property-queries)
    * [Type Relationships](#type-relationships)
    * [Type Transformations](#type-transformations)
    * [Other Transformations](#other-transformations)
    * [Logical Operations](#logical-operations)
    * [Sequences](#sequences)
<!-- TOC -->


## Introduction

&ensp; This library contains headers and classes related to the C++ language. The
contents of this library include the Language Support, Diagnostics, and
Metaprogramming libraries of the C++ Standard Library and Template Library.

See:
 - [Language Support Library](https://cppreference.com/w/cpp/utility.html#Language_support)
   - Basic Memory Management is handled in the [Memory Library](./MEMORY_LIBRARY.md#)
 - [Diagnostics Library](https://cppreference.com/w/cpp/error.html)
 - [Metaprogramming Library](https://cppreference.com/w/cpp/meta.html)


## Implementation

### Diagnostics
| Symbol  | Implemented | Passed |
|:--------|:-----------:|:------:|
| assert  |      ✅      |   ✅    |
| assertf |      ✅      |   ✅    |
| assertd |      ✅      |   ✅    |

### Utility
| Symbol           | Implemented | Passed |
|:-----------------|:-----------:|:------:|
| numeric_limits   |      ✅      |   ✅    |
| initializer_list |      ⛔      |   ⛔    |

### Primary Types
| Symbol                     | Implemented | Passed |
|:---------------------------|:-----------:|:------:|
| is_void                    |      ✅      |   ✅    |
| is_null_pointer            |      ✅      |   ✅    |
| is_integral                |      ✅      |   ✅    |
| is_floating_point          |      ✅      |   ✅    |
| is_array                   |      ✅      |   🚧   |
| is_enum                    |      ⛔      |   ⛔    |
| is_union                   |      ⛔      |   ⛔    |
| is_class                   |      ✅      |   ✅    |
| is_function                |      ⛔      |   ⛔    |
| is_pointer                 |      ✅      |   ✅    |
| is_lvalue_reference        |      ✅      |   ✅    |
| is_rvalue_reference        |      ✅      |   ✅    |
| is_member_object_pointer   |      ⛔      |   ⛔    |
| is_member_function_pointer |      ⛔      |   ⛔    |

### Composite Types
| Symbol            | Implemented | Passed |
|:------------------|:-----------:|:------:|
| is_fundamental    |      ✅      |   ✅    |
| is_arithmetic     |      ✅      |   ✅    |
| is_scalar         |      ⛔      |   ⛔    |
| is_object         |      ⛔      |   ⛔    |
| is_compound       |      ⛔      |   ⛔    |
| is_reference      |      ⛔      |   ⛔    |
| is_member_pointer |      ⛔      |   ⛔    |

### Type Properties
| Symbol                            | Implemented | Passed |
|:----------------------------------|:-----------:|:------:|
| is_const                          |      ✅      |   ✅    |
| is_volatile                       |      ✅      |   ✅    |
| is_trivially_copyable             |      ✅      |   ✅    |
| is_standard_layout                |      ⛔      |   ⛔    |
| has_unique_object_representations |      ⛔      |   ⛔    |
| is_empty                          |      ⛔      |   ⛔    |
| is_polymorphic                    |      ⛔      |   ⛔    |
| is_abstract                       |      ⛔      |   ⛔    |
| is_final                          |      ⛔      |   ⛔    |
| is_aggregate                      |      ⛔      |   ⛔    |
| is_implicit_lifetime              |      ⛔      |   ⛔    |
| is_signed                         |      ✅      |   ✅    |
| is_unsigned                       |      ✅      |   ✅    |
| is_bounded_array                  |      ⛔      |   ⛔    |
| is_unbounded_array                |      ⛔      |   ⛔    |
| is_scoped_enum                    |      ⛔      |   ⛔    |

### Supported Operations
| Symbol                              | Implemented | Passed |
|:------------------------------------|:-----------:|:------:|
| is_constructible                    |      ✅      |   ✅    |
| is_trivially_constructible          |      ✅      |   ✅    |
| is_nothrow_constructible            |      ⛔      |   ⛔    |
| is_default_constructible            |      ✅      |   ✅    |
| is_trivially_default_constructible  |      ⛔      |   ⛔    |
| is_nothrow_default_constructible    |      ⛔      |   ⛔    |
| is_copy_constructible               |      ✅      |   ✅    |
| is_trivially_copy_constructible     |      ⛔      |   ⛔    |
| is_nothrow_copy_constructible       |      ⛔      |   ⛔    |
| is_move_constructible               |      ✅      |   ✅    |
| is_trivially_move_constructible     |      ⛔      |   ⛔    |
| is_nothrow_move_constructible       |      ⛔      |   ⛔    |
| is_destructible                     |      ⛔      |   ⛔    |
| is_trivially_destructible           |      ⛔      |   ❌    |
| is_nothrow_destructible             |      ❌      |   ❌    |
| has_virtual_destructor              |      ❌      |   ❌    |
| is_swappable                        |      ❌      |   ❌    |
| is_swappable_with                   |      ❌      |   ❌    |
| is_nothrow_swappable                |      ❌      |   ❌    |
| is_nothrow_swappable_with           |      ❌      |   ❌    |
| reference_constructs_from_temporary |      ❌      |   ❌    |
| reference_converts_from_temporary   |      ❌      |   ❌    |

### Property Queries
| Symbol       | Implemented | Passed |
|:-------------|:-----------:|:------:|
| alignment_of |      ❌      |   ❌    |
| rank         |      ❌      |   ❌    |
| extent       |      ❌      |   ❌    |

### Type Relationships
| Symbol                              | Implemented | Passed |
|:------------------------------------|:-----------:|:------:|
| is_same                             |      ✅      |   ✅    |
| is_base_of                          |      ❌      |   ❌    |
| is_virtual_base_of                  |      ❌      |   ❌    |
| is_convertible                      |      ✅      |   ✅    |
| is_nothrow_convertible              |      ❌      |   ❌    |
| is_layout_compatible                |      ❌      |   ❌    |
| is_pointer_interconvertible_base_of |      ❌      |   ❌    |
| is_invocable                        |      ❌      |   ❌    |
| is_invocable_r                      |      ❌      |   ❌    |
| is_nothrow_invocable                |      ❌      |   ❌    |
| is_nothrow_invocable_r              |      ❌      |   ❌    |

### Type Transformations
| Symbol               | Implemented | Passed |
|:---------------------|:-----------:|:------:|
| add_const            |      ✅      |   ✅    |
| add_volatile         |      ✅      |   ✅    |
| add_cv               |      ✅      |   ✅    |
| remove_const         |      ✅      |   ✅    |
| remove_volatile      |      ✅      |   ✅    |
| remove_cv            |      ✅      |   ✅    |
| add_lvalue_reference |      ✅      |   ✅    |
| add_rvalue_reference |      ✅      |   ✅    |
| remove_reference     |      ✅      |   ✅    |
| add_pointer          |      ✅      |   ✅    |
| remove_pointer       |      ✅      |   ✅    |
| make_signed          |      ✅      |   ✅    |
| make_unsigned        |      ✅      |   ✅    |
| remove_extent        |      ❌      |   ❌    |
| remove_all_extents   |      ❌      |   ❌    |

### Other Transformations
| Symbol                 | Implemented | Passed |
|:-----------------------|:-----------:|:------:|
| aligned_storage        |      ❌      |   ❌    |
| aligned_union          |      ❌      |   ❌    |
| aligned_union          |      ❌      |   ❌    |
| decay                  |     🚧      |   🚧   |
| remove_cvref           |      ✅      |   ✅    |
| enable_if              |      ✅      |   ✅    |
| conditional            |      ✅      |   ✅    |
| common_type            |      ❌      |   ❌    |
| common_reference       |      ❌      |   ❌    |
| basic_common_reference |      ❌      |   ❌    |
| underlying_type        |      ❌      |   ❌    |
| result_of              |      ❌      |   ❌    |
| invoke_result          |      ❌      |   ❌    |
| void_t                 |      ✅      |   ✅    |

### Logical Operations
| Symbol      | Implemented | Passed |
|:------------|:-----------:|:------:|
| conjunction |      ❌      |   ❌    |
| disjunction |      ❌      |   ❌    |
| negation    |      ❌      |   ❌    |

### Sequences
| Symbol                                           | Implemented | Passed |
|:-------------------------------------------------|:-----------:|:------:|
| const_sequence                                   |      ✅      |   ✅    |
| const_integer_sequence (`std::integer_sequence`) |      ✅      |   ✅    |
| make_integer_sequence                            |      ✅      |   ✅    |
| const_index_sequence (`std::index_sequence`)     |      ✅      |   ✅    |
| make_index_sequence                              |      ✅      |   ✅    |
| concat_sequence                                  |      ✅      |   ✅    |
