A const idiom + a different 'delete'

Andrej Mitrovic andrej.mitrovich at gmail.com
Wed Aug 11 10:14:28 PDT 2010


Actually that was a pretty useless example. const needs to be evaluable at
compile-time, so why did I bother creating a template function? lol..

On Wed, Aug 11, 2010 at 7:03 PM, Andrej Mitrovic <andrej.mitrovich at gmail.com
> wrote:

> I think a more appropriate word for that would be "hide", or maybe
> "freeze".
>
> Here's another alternative, if you can call it that :p :
>
> import std.stdio;
>
> auto freeze(alias dg)()
> {
>     return cast(const) dg();
> }
>
> void main() {
>     auto aa = freeze!(
>
>     {
>         int[int] aa_;
>         foreach (i; 0 .. 10)
>             aa_[i] = i * i;
>
>         return aa_;
>     });
>
>     writeln(aa, " ", typeid(aa));
> }
>
> But that returns const(const(int)[int]).
>
> I'm not sure if there's a way to hide a symbol, appart from introducing
> another scope with { }. That wouldn't work in this case, since you want a
> const type back. Perhaps using the "variant" type from Phobos could do the
> trick.. I haven't played with that yet.
>
>
> On Wed, Aug 11, 2010 at 6:01 PM, bearophile <bearophileHUGS at lycos.com>wrote:
>
>> > Here delete doesn't clean the aa_, it just removes the aa_ name from the
>> local namespace.
>>
>> It's similar to the #undef directive of C.
>>
>> Bye,
>> bearophile
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puremagic.com/pipermail/digitalmars-d/attachments/20100811/2dc20dc1/attachment.html>


More information about the Digitalmars-d mailing list