2015-11-07 38 views
2
template IsSame(T){ 
    template As(alias t){ 
    enum As = is(T : typeof(t)); 
    } 
} 
void main() 
{ 
    int i; 
    enum b = IsSame!int.As!(i); 
} 

錯誤:不能使用當地的「i」作爲參數傳遞給非全局模板

Error: template instance As!(i) cannot use local 'i' as parameter to non-global template As(alias t) dmd failed with exit code 1

我不明白的錯誤消息。

我也試過

template IsSame(T){ 
    enum As(alias t) = is(T : typeof(t)); 
} 

導致

Error: template app.IsSame!int.As cannot deduce function from argument types !()(int), candidates are: source/app.d(50,8):
app.IsSame!int.As(alias t)

我在做什麼錯?

+0

是否有您使用'B',而不是''bool'一個enum'原因? –

+0

我在編譯時需要它,不確定bool是否足夠。 –

回答

1

在DMD 2.069.0和DMD 2.065,正常工作時i是全球性的:

import std.stdio; 

template IsSame(T){ 
    template As(alias t){ 
    enum As = is(T : typeof(t)); 
    } 
} 

int i; 

void main() 
{ 
    bool b = IsSame!int.As!(i); 
    writeln(b); // true 
} 

documentation for template alias parameters要求這些使模板與當地的名字,也被參數化,但未能提供一個例子如何做到這一點:

Alias parameters enable templates to be parameterized with any type of D symbol, including global names, local names, module names, template names, and template instance names. Literals can also be used as arguments to alias parameters.

(重點煤礦)

+0

如果我將模板標記爲靜態,如'staitc模板IsSame(T){' –

+0

}爲了完整起見,您可能希望將工作代碼作爲您自己的答案發布。 –

相關問題