namespace saw { namespace impl { /** * This class provides */ template struct forst_codec_info { static_assert(always_false, "Not supported."); }; template struct forst_codec_info> { private: public: static constexpr uint64_t layers = 0u; }; template<> struct forst_codec_info { public: static constexpr uint64_t layers = 1u; }; template struct forst_codec_info> { public: static constexpr uint64_t layers = 1u + forst_codec_info::layers; }; template struct forst_codec_info > { public: template static uint64_t max_layers() constexpr noexcept { if constexpr ( i < sizeof...(Members) ) { using MT = typename parameter_pack_type::type; constexpr uint64_t layer_i = forst_codec_info::layers; constexpr uint64_t layer_next = max_layers(); constexpr uint64_t layer_val = layer_i > layer_next ? layer_i : layer_next; return layer_val; } return 0u; } public: static constexpr uint64_t layers = max_layers<0>(); }; template struct forst_codec_info> { public: template static uint64_t max_layers() constexpr noexcept { if constexpr ( i < sizeof...(Members) ) { using MT = typename parameter_pack_type::type; constexpr uint64_t layer_i = forst_codec_info::layers; constexpr uint64_t layer_next = max_layers(); constexpr uint64_t layer_val = layer_i > layer_next ? layer_i : layer_next; return layer_val; } return 0u; } public: static constexpr uint64_t layers = max_layers<0>(); }; } }