welder 0.1.0
Bindings for annotated C++ types, from C++26 reflection
Loading...
Searching...
No Matches
carriage.hpp File Reference

The carriage: welder's reflection-driven traversal driver, kept separate from the welder::welder<> entry point (<welder/welder.hpp>) it feeds. More...

#include <array>
#include <cstddef>
#include <meta>
#include <type_traits>
#include <utility>
#include <welder/bind_traits.hpp>
#include <welder/bindable.hpp>
#include <welder/concepts.hpp>
#include <welder/doc.hpp>
#include <welder/naming.hpp>
#include <welder/reflect.hpp>
Include dependency graph for carriage.hpp:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  welder::detail::scoped_registration< Resolution, Scope >
 The scope-aware registration oracle: Resolution widened with the member-alias registrations of one class. More...
struct  welder::carriages::marker_resolution
 Stitch-welding resolution: bind only where welder's markers say to. More...
struct  welder::carriages::greedy_resolution< WeldProtected >
 Tack-welding resolution: bind an unmarked library greedily. More...
struct  welder::carriages::basic_carriage< Resolution >
 A carriage: welder's reflection-driven traversal, parameterized on a Resolution (which markers it obeys). More...

Namespaces

namespace  welder
namespace  welder::detail
 The stored forms of the annotation vocabulary.
namespace  welder::carriages

Typedefs

using welder::stitch_welding_carriage = carriages::basic_carriage<carriages::marker_resolution>
 The stitch-welding carriage (the default): binds only where welder's weld / policy / marks direct — intermittent, marker-driven, like a stitch weld.
using welder::tack_welding_carriage
 The tack-welding carriage: binds an unmarked library greedily — every reflectable type / function / global, namespaces recursed, bases flattened — ignoring the weld markers, while still enforcing the bindability gate.
using welder::carriage = stitch_welding_carriage
 The default carriage — an alias for welder::stitch_welding_carriage.

Functions

template<class Resolution, std::meta::info Ns, std::meta::info Alias>
consteval bool welder::detail::sole_alias_of_target (lang L, policy_kind pol)
 Is Alias the only participating alias in Ns welding its specialization?
template<std::meta::info Alias, lang L, class Style, ent_kind Kind = ent_kind::class_>
consteval const char * welder::detail::alias_bound_name ()
 The bound name of the type welded through Alias (a namespace-scope alias to a specialization, or a member alias inside a welded class).
consteval bool welder::is_nested_type (std::meta::info type)
 Is type declared at class scope — a nested (member) type?
template<class Resolution>
consteval bool welder::detail::nested_type_registered (std::meta::info type, lang L)
 The GATE side of the nested-type sweep: does class-scoped type register with its enclosing class's binding under Resolution?
template<class Resolution, std::meta::info Outer, std::meta::info Alias>
consteval bool welder::detail::sole_member_alias_of_target (lang L, policy_kind pol)
 Is Alias the only member alias of Outer whose participation would register its target?
template<class Resolution>
consteval bool welder::detail::registered_by_member_alias (std::meta::info scope, std::meta::info type, lang L)
 Does a participating member alias of scope name type — i.e.

Detailed Description

The carriage: welder's reflection-driven traversal driver, kept separate from the welder::welder<> entry point (<welder/welder.hpp>) it feeds.

In welding, the carriage (or tractor) is the mechanism that drives the torch — fed by the rod — steadily along the joint. Here it is the entity that walks a reflected type or namespace and drives a welder::rod's emission primitives along it: it owns all the traversal and emission orchestration (base flattening, the bindability gate, name resolution, sessions), delegating only the which participates decisions to a resolution policy and the framework-specific emission to the rod.

Two resolutions and their carriage aliases ship: marker_resolution / welder::stitch_welding_carriage (the default — honor weld/policy/marks) and greedy_resolution / welder::tack_welding_carriage (ignore the markers, bind an unmarked library greedily). The seam is open: inject a custom basic_carriage<Resolution> as welder::welder's third template argument.

Provide the vocabulary first — #include <welder/vocabulary.hpp> — then this header (<welder/welder.hpp>, and each backend header, includes it for you).

Definition in file carriage.hpp.