------------------------------------------------------------------------------
--                                                                          --
--                         GNAT COMPILER COMPONENTS                         --
--                                                                          --
--                 ADA.TAGS.GENERIC_DISPATCHING_CONSTRUCTOR                 --
--                                                                          --
--                                 S p e c                                  --
--                                                                          --
-- This specification is adapted from the Ada Reference Manual for use with --
-- GNAT.  In accordance with the copyright of that document, you can freely --
-- copy and modify this specification,  provided that if you redistribute a --
-- modified version,  any changes that you have made are clearly indicated. --
--                                                                          --
------------------------------------------------------------------------------

pragma Warnings (Off);
--  Turn of categorization warnings

generic
   type T (<>) is abstract tagged limited private;
   type Parameters (<>) is limited private;
   with function Constructor (Params : access Parameters) return T is abstract;

function Ada.Tags.Generic_Dispatching_Constructor
  (The_Tag : Tag; Params : access Parameters) return T'Class;
pragma Preelaborate_05 (Generic_Dispatching_Constructor);
pragma Import (Intrinsic, Generic_Dispatching_Constructor);
--  Note: the reason that we use Preelaborate_05 here is so that this will
--  compile fine during the normal build procedures. In Ada 2005 mode (which
--  is required for this package anyway), this will be treated as Preelaborate
--  so everything will be fine.
