scl-utility

ScL.Utility

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.

Requirements

Installation

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

Components

Meta — compile-time reflection

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

Preprocessor — macro utilities

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

Type traits — extended traits and helpers

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

Quick start

#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;
}

See also