classes inside functions?!

Don Clugston dac at nospam.com.au
Tue May 2 01:43:52 PDT 2006


Sean Kelly wrote:
> Bruno Medeiros wrote:
>> Sean Kelly wrote:
>>> Hasan Aljudy wrote:
>>>> I don't know if this is a bug or what, but for some reason, dmd 
>>>> allows you to define classes/structs/unions/enums as statements 
>>>> inside function bodies.
>>>> Oddly enough, you cannot define a template in the same way
>>>>
>>>> I didn't find in the docs any mention of whether aggregates are 
>>>> allowed inside function bodies or not.
>>>>
>>>> Walter, is this the correct behaviour?
>>>
>>> It is.  Templates are merely a special case as they must have 
>>> external linkage.
>>
>> What do you mean by that? What is external linkage? Did you meant an 
>> extern(al) storage class? (I just found out now something I unknew, 
>> that are two distinct "extern" keywords/concepts in D)
>> And how exactly does that restricts templates not being allowed inside 
>> functions?
> 
> External linkage means that a symbol is visible from another module. But 
> I mis-spoke.  Template parameters must have external linkage. Templates 
> themselves may only be defined at module or class scope.  This is a 
> carryover from C++, and I'm not certain whether there's a technical 
> obstacle to function-scope templates or not.  There doesn't seem to be, 
> but then I've never implemented template support in a compiler before. 
> Perhaps Walter could explain further.

There's some weird stuff in there. Mixins can be local, and because of 
alias template parameters, there's a name mangling for templates which 
are defined local to functions.



More information about the Digitalmars-d mailing list