-- { dg-do compile } with Ada.Iterator_Interfaces; procedure Iter6 is package Pkg is type Item (<>) is limited private; private type Cursor is null record; function Constant_Reference (The_Item : aliased Item; Unused_Index : Cursor) return String is (""); function Has_More (Data : Cursor) return Boolean is (False); package List_Iterator_Interfaces is new Ada.Iterator_Interfaces (Cursor, Has_More); function Iterate (The_Item : Item) return List_Iterator_Interfaces.Forward_Iterator'class is (raise Program_Error); type Item (Name_Length : Natural) is tagged limited record null; end record with Constant_Indexing => Constant_Reference, Default_Iterator => Iterate, Iterator_Element => String; end Pkg; use Pkg; type Item_Ref is access Item; function F return Item_Ref is (null); begin for I of F.all loop -- { dg-error "cannot iterate over \"Item\"" } null; end loop; end;