On Wednesday, 22 October 2025 at 14:40:58 UTC, H. S. Teoh wrote:
The user-facing function signature should describe the *logical* API, rather than implementation details such as "if input is a float, if input is an enum, ..." ad nauseaum. Logically, std.conv.to is supposed to accept *all* types (even if the current implementation may or may not accept *everything*), so the function signature should be:

    T to(T,U)(U data) { ... }

*without* any signature constraints. All the stuff like "if U is floating-point, if U is enum, if U is struct, ...", etc., are implementation details, that should be left to static if's inside the function body rather than clutter the API with an incomprehensibly large overload set.

In the specific case of `std.conv.to`, the user-facing template *is* unconstrained. Its signature is:

    template to(T)

However, the internal function that `to` forwards to, `toImpl`, does use template constraints to create an incomprehensible overload set.

Reply via email to