::declare< ::name<'x', 's'>, ::conditional_t< ::true_type::value, ::decltype( ::extent< ::array< ::array< ::remove_cv_t< ::int32_t >, ::integral_constant< ::size_t, ::tuple_size< ::array< ::byte, ::difference<'Z', 'F'> > >::value >::value >, ::integral_constant< ::size_t, ::difference<'Z', 'F'> >::value > >::value ), ::void > >::commit; ::emit<::decltype(::value_of<::name<'x', 's'>>)>::commit; // an array type says its extent, a bare type says its name ::emit<::array<::byte, ::value_of<::name<'x', 's'>>>>::commit;