diff --git a/include/sdbus-c++/VTableItems.h b/include/sdbus-c++/VTableItems.h index ae57a00a..28967eec 100644 --- a/include/sdbus-c++/VTableItems.h +++ b/include/sdbus-c++/VTableItems.h @@ -30,6 +30,7 @@ #include #include +#include #include #include #include @@ -40,9 +41,9 @@ namespace sdbus { { template MethodVTableItem& implementedAs(Function&& callback); MethodVTableItem& withInputParamNames(std::vector names); - template MethodVTableItem& withInputParamNames(String... names); + template ... String> MethodVTableItem& withInputParamNames(String... names); MethodVTableItem& withOutputParamNames(std::vector names); - template MethodVTableItem& withOutputParamNames(String... names); + template ... String> MethodVTableItem& withOutputParamNames(String... names); MethodVTableItem& markAsDeprecated(); MethodVTableItem& markAsPrivileged(); MethodVTableItem& withNoReply(); @@ -63,7 +64,9 @@ namespace sdbus { { template SignalVTableItem& withParameters(); template SignalVTableItem& withParameters(std::vector names); - template SignalVTableItem& withParameters(String... names); + template ... String> + requires(sizeof...(Args) == sizeof...(String)) + SignalVTableItem& withParameters(String... names); SignalVTableItem& markAsDeprecated(); SignalName name; diff --git a/include/sdbus-c++/VTableItems.inl b/include/sdbus-c++/VTableItems.inl index ee4e4e32..4445ef6a 100644 --- a/include/sdbus-c++/VTableItems.inl +++ b/include/sdbus-c++/VTableItems.inl @@ -29,6 +29,7 @@ #include #include +#include #include #include #include @@ -81,7 +82,7 @@ namespace sdbus { return *this; } - template + template ... String> inline MethodVTableItem& MethodVTableItem::withInputParamNames(String... names) { static_assert(std::conjunction_v...>, "Parameter names must be (convertible to) strings"); @@ -96,7 +97,7 @@ namespace sdbus { return *this; } - template + template ... String> inline MethodVTableItem& MethodVTableItem::withOutputParamNames(String... names) { static_assert(std::conjunction_v...>, "Parameter names must be (convertible to) strings"); @@ -155,12 +156,10 @@ namespace sdbus { return withParameters(); } - template + template ... String> + requires(sizeof...(Args) == sizeof...(String)) inline SignalVTableItem& SignalVTableItem::withParameters(String... names) { - static_assert(std::conjunction_v...>, "Parameter names must be (convertible to) strings"); - static_assert(sizeof...(Args) == sizeof...(String), "Numbers of signal parameters and their names don't match"); - return withParameters({names...}); }