import std.stdio; template TupleDecls(T, R ...) { T value; static if (R.length) mixin TupleDecls!(R) Inner; } struct TupleStruct(T ...) { mixin TupleDecls!(T); } void main() { alias TupleStruct!(char[], char[]) twoStrings; } --------- The above code generates the following errors when compiling: err.d(6): mixin err.TupleStruct!(char[],char[]).TupleStruct.TupleDecls!(char[],char[]).TupleDecls!(char[]) recursive mixin instantiation err.d(12): template instance err.TupleStruct!(char[],char[]) error instantiating The compiler seems to think that TupleDecls!(char[]) is the same as TupleDecls!(char[], char[]) somehow, and rejects instantiating the former inside the latter as being recursive, even though it's not.
Correction: it is recursive, but not infinitely recursive, as instantiating TupleDecls!(char[], char[]) inside of TupleDecls!(char[], char[]) would be. Also, the compiler accepts this code just fine when the types passed to the template aren't the same, as in TupleDecls!(char[], int).
Fixed dmd 1.032 and 2.016
AltStyle によって変換されたページ (->オリジナル) / アドレス: モード: デフォルト 音声ブラウザ ルビ付き 配色反転 文字拡大 モバイル