https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91431
Jonathan Wakely <redi at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords|needs-reduction |ice-on-invalid-code --- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> --- Reduced: template<typename T> class Blob { public: template< template<typename> class Alloc, template<typename, typename = Alloc<T>> class Container, class Iter = typename Container<T>::iterator > Blob(Iter b, Iter e) { } private: }; int main() { int i = 0; Blob<int> i_blob(&i, &i); } The code is invalid, you can't deduce the container and allocator from the iterator type like that.