#pragma once #include namespace NYql { template struct TArity; template struct TArity { static constexpr std::size_t value = sizeof...(Args); }; template struct TArity: TArity {}; #define METHOD_ARITY(TAIL) \ template \ struct TArity { \ static constexpr std::size_t value = 1 + sizeof...(Args); \ }; METHOD_ARITY() METHOD_ARITY(const) METHOD_ARITY(volatile) METHOD_ARITY(const volatile) METHOD_ARITY(&) METHOD_ARITY(const&) METHOD_ARITY(&&) METHOD_ARITY(const&&) METHOD_ARITY(noexcept) METHOD_ARITY(const noexcept) METHOD_ARITY(volatile noexcept) METHOD_ARITY(const volatile noexcept) #undef METHOD_ARITY }; // namespace NYql template inline constexpr std::size_t arity_v = NYql::TArity::value;