Templated static opCall in non-templated struct

Matthew Dudley pontifechs at gmail.com
Tue Feb 11 18:06:46 PST 2014


On Wednesday, 12 February 2014 at 01:59:54 UTC, Frustrated wrote:
> On Tuesday, 11 February 2014 at 00:00:06 UTC, Matthew Dudley
> wrote:
>> Here's the gist of what I'm trying to do:
>>
>> struct Foo
>> {
>> public:
>> 	int i;
>> 	int j;
>>
>> 	static opCall(int i)(int j, int k)
>> 	{
>> 		return Foo(i+j,i+k);
>> 	}
>> }
>>
>> void main()
>> {	
>> 	auto bob = Foo!(1)(2,3); //Error: template instance Foo!1 Foo 
>> is not a template declaration, it is a struct
>> }
>>
>>
>> I'm trying to template the static opCall function, not the 
>> struct. Is there a way to do disambiguate between the two?
>
> You can't do this! you are calling Foo as if it is a template...
> hence the error!
>
> Maybe the only solution is a new symbol such as
>
> Foo!!(1)(2,3)
>
> where !! tells the compiler that you are referencing an implicit
> function call and not a template. Would be an easy solution.

Well since Foo isn't templated, shouldn't the compiler know to 
apply the template to the function?


More information about the Digitalmars-d-learn mailing list