
Alexander Nasonov <alnsn <at> yandex.ru> writes:
BTW, switch_ doesn't implement fall-though and I was worried about performance of this important case (bzero with Duff's device optimization):
Sorry for typos and errors in code. Assembly are not identical but close. If I change modern_duff to throw from switch_, it would change assembly completely event though the compiler can deduce from n % 8 that all cases are covered. So, throwing is good for protecting programmers from accidental errors but not good for code generation. I wonder why don't you use none_t or even a special default_t? struct some_func { typedef void result_type; template<class Case> void operator()(Case c) const { std::cout << c << std::endl; } void operator()(default_t) const { throw out_of_range(); } }; Though, it may break passing a lambda expression to switch_ but this case probably is not supported because IIRC there is no result_type in lambda expression types. -- Alexander