Is this a compiler error? "recursive template expansion"
Basile B.
b2.temp at gmx.com
Tue Dec 8 22:01:52 UTC 2020
On Tuesday, 8 December 2020 at 20:11:40 UTC, Nathan S. wrote:
> The following code fails to compile. Is this a compiler error
> or if not what is wrong with the code?
What is wrong is that partial specialization is not correct.
The correct partial specialization is:
---
struct Template2(T)
{
enum tString = T.stringof;
static if (is(T == class))
enum tLinkage = __traits(getLinkage, T);
}
struct Template1(Param1, Param2 = Template2!Param1) {}
alias AliasTemplate1S(SecondParam) = Template1!(S,SecondParam);
// ^here
class S
{
Template1!int x;
}
---
Now that being said, the compiler could complain about the
incorrect partial spec instead of falling in the nonsensical
error message.
There is a gap because the second template param looks optional
so you dont put it the partial specialization but it is still
required.
Anyway. This case is either a "bad diagnostic" or an
"enhancement" request.
Or should be specified.
More information about the Digitalmars-d-learn
mailing list