comp.lang.ada
 help / color / mirror / Atom feed
From: Stephen Leake <stephen_leake@acm.org>
Subject: Re: prohibit certain generic instantiations in Ada 2005
Date: Sat, 11 Feb 2006 10:36:58 -0500
Date: 2006-02-11T10:36:58-05:00	[thread overview]
Message-ID: <uzmkxrjol.fsf@acm.org> (raw)
In-Reply-To: 1139645084.563448.239040@g47g2000cwa.googlegroups.com

matteo.bordin@gmail.com writes:

> I will provide a proper example in C++. With this code I can prohibit
> instantiation of template My_Class with T=int.
>
> class Checker{
> public:
>   static void check(float){};
> private:
>   static void check(int){};
> };
>
> template <class T>
> class My_Class{
> public:
> My_Class(){
>   T t;
>   Checker::check(t);
>
> }
> };
>
> int main(){
>
>   My_Class<int> mc = My_Class<int>(); //COMPILE TIME ERROR!!!!
>   //The error comes from the fact that Checker::check(int) is private
>   My_Class<float> mc2 = My_Class<float>(); //OK!!!
> };
>
> When I said that the compilation model for template of Ada is similar
> to C++, I meant in regards to compile-time code generation (opposed to
> the model of Java generics). In both languages (Ada and C++), templates
> can be used as a generative environment.

Ok, you _can_ do this in C++. But they question remains; _why_ do you
want to do this? What is it that Checker does that is appropriate for
all types, except 'int'?

> 
>  just want to know f here is a way to reproduce the C++ code I
> provided in Ada (2005).

You can write code in the execution part of a package body (after the
'begin') that does some checking, and raises an exception. Most
compilers will warn at compile time that a run-time construct will
raise an exception.

-- 
-- Stephe



  parent reply	other threads:[~2006-02-11 15:36 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-02-09 18:01 prohibit certain generic instantiations in Ada 2005 matteo.bordin
2006-02-09 20:02 ` Matthew Heaney
2006-02-10 14:18   ` matteo.bordin
2006-02-10 18:25     ` Dmitry A. Kazakov
2006-02-10 19:03       ` Georg Bauhaus
2006-02-11 10:45         ` Dmitry A. Kazakov
2006-02-11  8:04       ` matteo.bordin
2006-02-11  9:54         ` Martin Krischik
2006-02-11 10:20           ` matteo.bordin
2006-02-11 12:46             ` Martin Krischik
2006-02-11 10:45         ` Dmitry A. Kazakov
2006-02-11 22:20           ` Jeffrey R. Carter
2006-02-11 15:36         ` Stephen Leake [this message]
2006-02-12  8:55           ` matteo.bordin
2006-02-12  9:49             ` Dmitry A. Kazakov
2006-02-12 12:41               ` matteo.bordin
2006-02-13 19:14             ` Matthew Heaney
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox