Это классический пример обязательного использования typename
для идентификации именованных типов, которые зависят от параметра типа шаблона.Вы хотите использовать
typename map< Configuration<TT>, Configuration<TT> >::iterator found;
По сути, компилятор не может знать, что map< Configuration<TT>, Configuration<TT> >::iterator
является типом, а не, например, переменной-членом, если вы не укажете это.Каждый раз, когда вы используете именованный тип, который зависит от параметров шаблона, вы должны использовать typename
(за исключением нескольких исключительных случаев, таких как список инициализации конструктора).