www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Typeless function arguments

reply Tomek =?UTF-8?B?U293acWEc2tp?= <just ask.me> writes:
Funny thing:

void foo(T)(t); // typeless argument

If you don't instantiate the template, it actually compiles. Bug?

-- 
Tomek
Oct 16 2010
parent reply dsimcha <dsimcha yahoo.com> writes:
== Quote from Tomek SowiƄski (just ask.me)'s article
 Funny thing:
 void foo(T)(t); // typeless argument
 If you don't instantiate the template, it actually compiles. Bug?

IMHO yes, this is a bug. What you wrote is syntactic sugar for: template foo(T) { void foo(t); } The rule with uninstantiated template bodies is that the code needs to be syntactically correct, but not necessarily semantically correct (since the semantics can only be fully analyzed on instantiation). void foo(t) looks syntactically incorrect.
Oct 16 2010
parent Rainer Deyke <rainerd eldwood.com> writes:
On 10/16/2010 19:26, dsimcha wrote:
 The rule with uninstantiated template bodies is that the code needs to be
 syntactically correct, but not necessarily semantically correct (since the
 semantics can only be fully analyzed on instantiation).  void foo(t) looks
 syntactically incorrect.

I think 'void foo(t)' is syntactically correct. You can't know that 't' isn't the name of a type without semantic analysis. -- Rainer Deyke - rainerd eldwood.com
Oct 16 2010