{"id":22212119,"url":"https://github.com/guillaumedua/gcl_cpp","last_synced_at":"2025-09-01T12:04:27.141Z","repository":{"id":30728904,"uuid":"34285173","full_name":"GuillaumeDua/GCL_CPP","owner":"GuillaumeDua","description":"Makes my C++ projects easier and faster to develop","archived":false,"fork":false,"pushed_at":"2022-06-15T16:46:21.000Z","size":12319,"stargazers_count":10,"open_issues_count":15,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-07-27T12:45:29.555Z","etag":null,"topics":["c-plus-plus","cpp","cpp-library","cpp17","cpp17-library","cpp20","cpp20-library","gcl-cpp","metaprogramming","template-metaprogramming"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/GuillaumeDua.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-04-20T20:39:22.000Z","updated_at":"2023-09-04T21:16:23.000Z","dependencies_parsed_at":"2022-08-03T11:45:46.181Z","dependency_job_id":null,"html_url":"https://github.com/GuillaumeDua/GCL_CPP","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/GuillaumeDua/GCL_CPP","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GuillaumeDua%2FGCL_CPP","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GuillaumeDua%2FGCL_CPP/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GuillaumeDua%2FGCL_CPP/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GuillaumeDua%2FGCL_CPP/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/GuillaumeDua","download_url":"https://codeload.github.com/GuillaumeDua/GCL_CPP/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GuillaumeDua%2FGCL_CPP/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273121622,"owners_count":25049530,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-01T02:00:09.058Z","response_time":120,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c-plus-plus","cpp","cpp-library","cpp17","cpp17-library","cpp20","cpp20-library","gcl-cpp","metaprogramming","template-metaprogramming"],"created_at":"2024-12-02T20:47:56.732Z","updated_at":"2025-09-01T12:04:27.102Z","avatar_url":"https://github.com/GuillaumeDua.png","language":"C++","readme":"# **GCL C++**\r\n\r\n[![Ubuntu CMake Clang latest](https://github.com/GuillaumeDua/GCL_CPP/actions/workflows/cmake-Ubuntu-clang_latest.yml/badge.svg)](https://github.com/GuillaumeDua/GCL_CPP/actions/workflows/cmake-Ubuntu-clang_latest.yml)\r\n[![Ubuntu CMake GCC 10](https://github.com/GuillaumeDua/GCL_CPP/actions/workflows/cmake-Ubuntu-gcc_10.yml/badge.svg)](https://github.com/GuillaumeDua/GCL_CPP/actions/workflows/cmake-Ubuntu-gcc_10.yml)\r\n[![MSBuild-Windows-CL_latest](https://github.com/GuillaumeDua/GCL_CPP/actions/workflows/MSBuild-Windows-CL_latest.yml/badge.svg)](https://github.com/GuillaumeDua/GCL_CPP/actions/workflows/MSBuild-Windows-CL_latest.yml)\r\n[![Windows CMake ClangCL](https://github.com/GuillaumeDua/GCL_CPP/actions/workflows/cmake-Windows-ClangCL.yml/badge.svg)](https://github.com/GuillaumeDua/GCL_CPP/actions/workflows/cmake-Windows-ClangCL.yml)\r\n\r\n:construction: **WIP** : [see milestone v1 -\u003e v2](https://github.com/GuillaumeDua/GCL_CPP/milestone/2)\r\n\r\n---\r\n\r\nThis **modern-C++**, **header-only library** is a stack of useful and convinient components that make my everyday projects \u0026 jobs way easier.\r\n\r\nEach **component** *(spli by namespaces)* aims to be :\r\n\r\n- **easy-to-use**\r\n- **easy-to-maintain**\r\n- **powerful**\r\n\r\n\u003e **NB :** This library is a never-ending WIP, as it matches needs according to the C++ standards and compilers implementations.  \r\n\u003e Thus, many components only exists to fill what I consider to be STL holes, and so are likely to disappear when standard features are implemented *-and released-* in the standard and by compilers.  \r\n\r\n## Build\r\n\r\nThis library is header-only, meaning you only need to add `includes/gcl` to your include path.\r\n\r\nHowever, a `CMake` target exposes an `gcl_cpp` INTERFACE library target that you can integrate into your build.  \r\n\r\nCurrently, the only available option is `gcl_cpp_BUILD_TEST` - which is set to `OFF` by default - that generates a binary to run runtime tests.\r\n\r\n## Tests\r\n\r\nAs this library components are mainly template-metaprogramming or constexpr ones, most of the tests are processed at **`compile-time`**.  \r\n\r\nCurrently, there is no option to disable compile-time tests.  \r\n*If you need such option, create a Github issue, or make a pull-request.*\r\n\r\nAs mentioned in the previous section, a CMake target can be generate, when enabling the `gcl_cpp_BUILD_TEST` option.  \r\nHowever, it only cover runtime tests.\r\n\r\n## Versions\r\n\r\n| Name | Description |\r\n| ---- | ----------- |\r\n| **`v2`** | [WIP/refactoring](https://github.com/GuillaumeDua/GCL_CPP/milestone/2) to only use C++17/2a/20 implementations |\r\n| **`v1`** | **Legacy** tag that still exists for projects that depends on, but is no longer maintained\u003cbr\u003eOffers C++11/14/17 implementations in `gcl` namespace\u003cbr\u003eas well as C++98/03 implementations in `gcl::deprecated` namespace |\r\n\r\n## Features\r\n\r\n### table-of-content\r\n\r\n| **component** name | description                                                                                |\r\n|--------------------|--------------------------------------------------------------------------------------------|\r\n| `mp`           | meta-programming elements to provide computation at compile-time       |\r\n| `cx`           | constexpr elements |\r\n| `ctc`          | compile-time constants.\u003cbr\u003emainly provides algorithms to manipulate `std::array` and `std::tuple` at compile-time |\r\n| `io`           | io manipulation, mainly for serialization |\r\n| `container`    | containers |\r\n| `pattern`      | mid-level design patterns, such as ECS |\r\n| [algorithms](./includes/gcl/algorithms/README.md)   | some algorithms |\r\n| `functional`   | function-related elements |\r\n| `concepts`     | concepts definition. Note that most concepts are defined within components they are related to.\u003cbr\u003eFor instance, `gcl::mp::concepts` and `gcl::io::concepts` |\r\n\r\n\r\n## Compilers support\r\n\r\nThis library aims to compile using the following compilers :\r\n\r\n- `GCC`\r\n- `Clang`\r\n- `MsVC-CL`\r\n- `MS Clang-CL`\r\n\r\n*If at some point, a compiler does not support a specific feature, this information will be register as a limitation in-code comment  \r\nAlso, a warning will be generated at compile-time accordingly.*\r\n\r\n\u003e - Example : `Clang 11.0.0` does not implement `\"Lambdas in unevaluated contexts\" (P0315R4)`\r\n\r\n### Currently known limitations\r\n\r\n#### **`Clang`** / **`Clang-CL`**\r\n\r\n| File      | Element | Description |\r\n| --------- | ------- | ----------- |\r\n| gcl/mp/pack_traits.hpp | `gcl::mp::type_traits::index_of\u003cT, Ts...\u003e` | uses an alternative implementation that use recursion, in opposition to other compilers |\r\n| gcl/mp/pack_traits.hpp | `gcl::mp::pack_traits\u003c...\u003e::index_of_v`\u003cbr\u003e`gcl::mp::pack_traits\u003c...\u003e::first_index_of_v`\u003cbr\u003e`gcl::mp::pack_traits\u003c...\u003e::last_index_of_v` | Known limitation of Clang 12.0.0\u003cbr\u003e*Invalid operands to binary expression ('const auto' and 'int')* |\r\n\r\n#### **`Clang-CL`**\r\n\r\n| File      | Element | Description |\r\n| --------- | ------- | ----------- |\r\n| gcl/cx/array.hpp | `gcl::cx::array::remove_duplicates_v\u003cdatas\u003e` | a non-type template parameter cannot have type 'std::array\u003cT, N\u003e' |\r\n\r\n#### **`GCC`**\r\n\r\nNone.\r\n\r\n#### **`MsVC-CL`**\r\n\r\nNone.\r\n\r\n## STL implementations support\r\n\r\n### **`libstdc++`**\r\n\r\nNone.\r\n\r\n### **`libc++`**\r\n\r\nBroken on release prior to 13 (requires concepts implementations)\r\n\r\n### About the name\r\n\r\n\u003e `GCL` stands for `Guss's Common Library`\r\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fguillaumedua%2Fgcl_cpp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fguillaumedua%2Fgcl_cpp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fguillaumedua%2Fgcl_cpp/lists"}