Can templated functions be used in interfaces?

Jakob Ovrum jakobovrum at gmail.com
Thu Jul 11 05:03:09 PDT 2013


On Thursday, 11 July 2013 at 11:56:16 UTC, Gary Willoughby wrote:
> Any idea what i'm doing wrong?

Function templates cannot be virtual. You're allowed to declare 
non-virtual members of interfaces, but they must be defined. That 
means static functions, final functions and function templates 
can be declared in interfaces as long as they are defined. This 
is a feature of D.

However, in my opinion, it's a bug that you're allowed to declare 
a function template (when using the shortcut syntax) without 
defining it, whether in an interface or not. This is a rather 
natural bug though, due to the nature of function templates:

void a()();

is equivalent of:

template a() { void a(); }

Perhaps it makes sense to allow the declaration without 
definition when the template and function are explicitly 
separated (can anyone think of a case where this is useful? Maybe 
mixin-related?), but when using the former syntax - the function 
template syntax - I don't think it makes any sense.

Whether or not function templates in general should be declarable 
without a definition, it's definitely a bug that you can do it in 
an interface.


More information about the Digitalmars-d-learn mailing list