// lesson 5: loops // // ::repeat> runs the sequence V times. that is the whole // loop. there is no index, no condition, no break. ::repeat< ::difference<'D', 'A'>, ::sequence< ::emit< ::tuple< ::integral_constant<::char, ::difference<'h', '\0'>>, ::integral_constant<::char, ::difference<'i', '\0'>> > >::commit > >::commit; // counting needs a variable, and changing a variable needs the undeclare dance, // and the dance needs a second variable to hold the value while the first one // is dead. this prints 1, 2, 3 ::declare< ::name<'i'>, ::decltype(::difference<'B', 'A'>) >::commit; ::repeat< ::difference<'D', 'A'>, ::sequence< ::emit<::decltype(::value_of<::name<'i'>>)>::commit, ::declare< ::name<'n', 'e', 'x', 't'>, ::decltype( ::sum< ::value_of<::name<'i'>>, ::difference<'B', 'A'> > ) >::commit, ::undeclare<::name<'i'>>::commit, ::declare< ::name<'i'>, ::decltype(::value_of<::name<'n', 'e', 'x', 't'>>) >::commit, ::undeclare<::name<'n', 'e', 'x', 't'>>::commit > >::commit;