diff --git a/Source/Core/Core/HW/WiimoteEmu/Extension/DesiredExtensionState.h b/Source/Core/Core/HW/WiimoteEmu/Extension/DesiredExtensionState.h index a61da143bc..f2d100bc48 100644 --- a/Source/Core/Core/HW/WiimoteEmu/Extension/DesiredExtensionState.h +++ b/Source/Core/Core/HW/WiimoteEmu/Extension/DesiredExtensionState.h @@ -17,21 +17,42 @@ #include "Core/HW/WiimoteEmu/Extension/TaTaCon.h" #include "Core/HW/WiimoteEmu/Extension/Turntable.h" #include "Core/HW/WiimoteEmu/Extension/UDrawTablet.h" +#include "Core/HW/WiimoteEmu/ExtensionPort.h" namespace WiimoteEmu { struct DesiredExtensionState { private: + template + struct ExtNumTypePair + { + static constexpr ExtensionNumber ext_num = N; + using ext_type = T; + }; + template struct ExtDataImpl { - using type = std::variant; + using type = std::variant; + + static_assert((std::is_same_v, + typename Ts::ext_type::DesiredState> && + ...), + "Please use ExtensionNumber enum order for DTM file index consistency."); }; public: - using ExtensionData = ExtDataImpl::type; + using ExtensionData = + ExtDataImpl, + ExtNumTypePair, + ExtNumTypePair, + ExtNumTypePair, + ExtNumTypePair, + ExtNumTypePair, + ExtNumTypePair, + ExtNumTypePair, + ExtNumTypePair>::type; ExtensionData data = std::monostate{}; };