Common C++20 utilities not available in the standard library.
ScL.Utility is a header-only module of the ScL Toolkit providing compile-time meta-programming helpers, preprocessor utilities, and extended type traits.
Add as a subdirectory in CMake and link against the interface target:
add_subdirectory(module/utility)
target_link_libraries(your_target PRIVATE scl::utility)
Then include the umbrella header or individual component headers:
#include <scl/utility.h> // everything
#include <scl/utility/meta.h> // meta only
| Component | Header | Description |
|---|---|---|
| type_name | <scl/utility/meta/type.h> |
Compile-time type name extraction |
| enum_name | <scl/utility/meta/enum.h> |
Compile-time enum member name extraction |
| symbol_name | <scl/utility/meta/symbol.h> |
Compile-time function/member name extraction |
| Component | Header | Description |
|---|---|---|
| SCL_FORWARD | <scl/utility/preprocessor/forward.h> |
Identity macro for token forwarding |
| SCL_COUNTER | <scl/utility/preprocessor/counter.h> |
Compile-time counter via ADL |
| Component | Header | Description |
|---|---|---|
| detection | <scl/utility/type_traits/detection.h> |
Detection idiom (is_detected, etc.) |
| forward_like | <scl/utility/type_traits/forward_like.h> |
Forward with value category of another type |
| member_like | <scl/utility/type_traits/member_like.h> |
Member pointer trait decomposition |
| overload_cast | <scl/utility/type_traits/overload_cast.h> |
Overloaded function disambiguation |
#include <scl/utility/meta/type.h>
#include <scl/utility/meta/enum.h>
#include <iostream>
enum class Color { Red, Green, Blue };
int main() {
std::cout << scl::type_name<std::vector<int>>() << std::endl;
std::cout << scl::enum_name<Color::Red>() << std::endl;
}