On Sunday, 11 March 2018 at 13:44:38 UTC, Basile B. wrote:
The first version works here:
```
template aliasOf(T) {
enum aliasOf(alias a) = is(typeof(a) == T);
}
string s;
pragma(msg, allSatisfy!(aliasOf!string, s, "string"));
```
I can see that my description was a little confusing, sorry about
that, I meant to ask how would you call that without using the
allSatisfy meta template. If I were to call it as a stand alone,
ie:
writeln(aliasOf!string<how do I pass argument to inner
template?>);
I hope that makes it clearer.
Now on the fact that what is done is correct is another story.
If the literal passed is supposed to be a type then it's
clearly wrong.
You'd have to mix it:
```
template aliasOf(T)
{
template aliasOf(alias a)
{
mixin("alias A = " ~ a ~ ";");
enum aliasOf = is(A == T);
}
}
alias myString1 = string;
alias myString2 = string;
pragma(msg, allSatisfy!(aliasOf!string, "myString1",
"myString2"));
```
Aye, I see what you mean, but it is supposed to be a literal of a
specific type. I.e. 3, "some string", SomeType(), etc.
So aliasOf!int.aliasOf!3 // true
Also, if I define it like this:
template aliasOf(T) {
auto aliasOf(U)(U) { return is(U == T); }
}
Then at least I can call it like:
writeln(aliasOf!int(3)); // prints true
But then I can't do:
allSatisfy!(aliasOf!int, 3)
I guess because it's a function now and not a template anymore so
can't be used by allSatisfy.