id summary reporter owner description type status milestone component version severity resolution keywords cc 9072 "`iterator_range` does not accept iterators having ""reference to function type"" as `reference` nested type" Michel Morin Neil Groves "This is a very minor thing. This code works: {{{ #include #include void zero() { std::cout << ""zero"" << std::endl; } void non_zero() { std::cout << ""non-zero"" << std::endl; } typedef void function_type(); function_type& f(int i) { if (i == 0) { return zero; } else { return non_zero; } } int main(int argc, char* argv[]) { int ar[2] = {0, 1}; typedef boost::transform_iterator iterator; iterator it_0 = boost::make_transform_iterator(ar + 0, f); iterator it_1 = boost::make_transform_iterator(ar + 1, f); (*it_0)(); (*it_1)(); return 0; } }}} But this code does not compile: {{{ #include #include #include void zero() { std::cout << ""zero"" << std::endl; } void non_zero() { std::cout << ""non-zero"" << std::endl; } typedef void function_type(); function_type& f(int i) { if (i == 0) { return zero; } else { return non_zero; } } int main(int argc, char* argv[]) { int ar[2] = {0, 1}; typedef boost::transform_iterator iterator; typedef boost::iterator_range range; range rng( boost::make_transform_iterator(ar, f) , boost::make_transform_iterator(ar + 2, f) ); rng[0](); rng[1](); return 0; } }}} This is because `iterator_range` does not accept iterators having ""reference to function type"" as `reference` nested type. Patch attached. Tested on gcc-4.7 and clang trunk." Patches closed To Be Determined range Boost Development Trunk Problem fixed