AVR, deducing this and parameter packs
Das Register DDRB ist ein special function register (SFR) mit der Addresse 0x17 und den Port Pins DDB und PB.
using DDRB_t = _SFR_t<0x17, DDB_t, PB_t>;
Der Type _SFR_t ist implementiert mittels Template Values für die Addresse und Variadic parameter packs für die erlaubten Port Pin Typen. Die Port Pin Typen werden an den Type BitOperationen weiter geleitet.
template<uint16_t addr, typename... Allowed> struct _SFR_t : BitOperationen<Allowed...>
Der Typ BitOperationen nimmt als parameter pack eine menge von typen entgegen für welche die bit operationen erlaubt sind und in jeder member funktion wird der typ der member funktion gegen diese list gechekct
template<typename Self, typename PX_t> requires (is_same_v<PX_t, Allowed> || ... ) void operator|=(this Self&& self, PX_t PX) { *self |= PX.value; }