cpp / expert
Snippet
Static Unit Checker with User-Defined Literals
Expert-level type safety using user-defined literals. By wrapping raw types in structs and defining custom literal operators, you can prevent logic errors like adding meters to kilometers at compile-time.
snippet.cpp
cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>struct Meters {long double val;explicit constexpr Meters(long double m) : val(m) {}};struct Kilometers {long double val;explicit constexpr Kilometers(long double k) : val(k) {}};constexpr Meters operator"" _m(long double m) { return Meters(m); }constexpr Kilometers operator"" _km(long double k) { return Kilometers(k); }void navigate(Meters distance) {std::cout << "Traveling " << distance.val << " meters.\n";}int main() {navigate(500.0_m); // Correct// navigate(1.2_km); // Compilation Error: prevents mixing units}
Breakdown
1
constexpr Meters operator"" _m(long double m)
Defines a custom suffix that converts a literal number into a typed object at compile-time.
2
explicit constexpr Meters(long double m)
The 'explicit' keyword prevents accidental implicit conversions from raw numeric types.