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

welder's consteval diagnostics, collected in one place: every hand-rolled compile-time error the library raises beyond a static_assert is one of the exception types below, thrown during constant evaluation (a C++26 constexpr exception). More...

This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  welder::diag::lang_out_of_mask_range
 Thrown by lang_bit (<welder/annotations.hpp>) when a lang value lies past the 32-bit language-mask width — instead of an opaque shift-overflow error. More...
struct  welder::diag::dangling_return_policy
 Thrown by validate_return_policy (<welder/reflect.hpp>) — every rod runs it at its per-overload bind site — when a reference-category return_policy meets a by-value return. More...
struct  welder::diag::bare_mark_only
 Thrown by member_bound (<welder/reflect.hpp>) when a member carries a bare [[=welder::mark::only]] — "only, for every language" restricts nothing, so the mark must be called. More...
struct  welder::diag::no_matching_virtual_slot
 Thrown by virtual_slot (<welder/rods/python/trampoline.hpp>, reached through WELDER_PY_OVERRIDE_AS) when no overridable virtual of the class matches the requested name and function type. More...
struct  welder::diag::stale_hook_signature
 Thrown by member_access_admitted (<welder/bind_traits.hpp>) when a resolution still declares its optional protected_participates hook under the superseded two-argument signature — which would otherwise be silently ignored (the detection is a requires probe). More...
struct  welder::diag::marked_move_constructor
 Thrown by validate_move_ctor_marks (<welder/bind_traits.hpp>) — the carriage runs it for every welded class — when a move constructor carries an include/only mark. More...
struct  welder::diag::accessor_name_too_long
 Thrown by the accessor_name factory helper (<welder/annotations.hpp>) when a getter/setter explicit property name exceeds the spec's inline capacity (the spec is deliberately not length-templated — see accessor_name_capacity). More...
struct  welder::diag::malformed_getter
 Thrown by property_entries (<welder/bind_traits.hpp>) when a [[=welder::getter]] sits on a function that is not a getter shape: it must be a const member function taking no parameters and returning a value. More...
struct  welder::diag::malformed_setter
 Thrown by property_entries (<welder/bind_traits.hpp>) when a [[=welder::setter]] sits on a function that is not a setter shape: it must be a member function taking exactly one parameter. More...
struct  welder::diag::accessor_role_conflict
 Thrown by property_entries (<welder/bind_traits.hpp>) when one function carries both a getter and a setter mark for the same language — a function supplies one property half, never both. More...
struct  welder::diag::duplicate_property_accessor
 Thrown by property_entries (<welder/bind_traits.hpp>) when two getters (or two setters) resolve to the same property name for one language — a property has exactly one function per half. More...
struct  welder::diag::setter_without_getter
 Thrown by property_entries (<welder/bind_traits.hpp>) when a participating setter's property has no participating getter in that language — welder binds no write-only properties. More...
struct  welder::diag::accessor_weld_as_conflict
 Thrown by property_entries (<welder/bind_traits.hpp>) when an accessor-marked function also carries a weld_as — the accessor's explicit name is the property's rename tool, so the two would fight. More...
struct  welder::diag::static_property_accessor
 Thrown by property_entries (<welder/bind_traits.hpp>) on an accessor-marked static member function: static properties are not supported yet (deferred — the Python frameworks have def_property_static, the Lua rods have no equivalent surface). More...
struct  welder::diag::virtual_property_accessor
 Thrown by property_entries (<welder/bind_traits.hpp>) on an accessor-marked virtual member function: both Python rods dispatch overrides through a by-name attribute lookup, and a property object under that name would silently break the override protocol — rejected rather than bound subtly wrong. More...
struct  welder::diag::property_name_collision
 Thrown by property_entries (<welder/bind_traits.hpp>) when a resolved property name collides with a bound data member or a (non-accessor) method of the same class surface. More...

Namespaces

namespace  welder
namespace  welder::diag

Detailed Description

welder's consteval diagnostics, collected in one place: every hand-rolled compile-time error the library raises beyond a static_assert is one of the exception types below, thrown during constant evaluation (a C++26 constexpr exception).

An uncaught constexpr exception renders the program ill-formed with the exception's type and the carried what prose verbatim in the compiler's uncaught exception '…' diagnostic — one error, a greppable type name, and a real punctuation-and-spaces message, where the older undefined-function-anchor idiom produced two errors with the message crammed into an identifier.

Each type carries its canonical message as a default member initializer, so a raise site is just throw diag::bare_mark_only{}; — the message has a single source of truth here.

Like the vocabulary headers (lang.hpp, annotations.hpp), this header is std-include-free — the messages are plain const char*, core language only — so the vocabulary may include it and a future import welder; module wrapper can re-export it without leaking std into importers.

Definition in file diag.hpp.