working then
refactor dispatcher to use decltype
working dispatcher then
Merge branch 'feature/then'