--------------- import std.stdio; struct Foo { int a; } int bar() { writeln(); return 1; } void main() { Foo x = Foo!(bar()); } --------------- A template argument is (accidentally) being passed to Foo. The compiler should, and does, print a "not a template declaration" error. But before doing so, it evaluates the completely erroneous template arg, resulting in a big pile of totally non-applicable error text ("cannot be interpreted at compile time") which obscures the one real problem. >dmd test.d C:\Documents and Settings\Nick Sabalausky\Application Data\dvm\compilers\dmd-2.059\bin\..\src\phobos\std\stdio.d(1548): Error: fputc cannot be interpreted at compile time, because it has no available source code C:\Documents and Settings\Nick Sabalausky\Application Data\dvm\compilers\dmd-2.059\bin\..\src\phobos\std\stdio.d(1548): called from here: enforce(fputc(10,(*stdout.p).handle) == 10,delegate pure nothrow @safe const(char)[]() { return null; } ) test.d(10): called from here: writeln() test.d(16): called from here: bar() test.d(16): Error: template instance Foo!(bar()) Foo is not a template declaration, it is a struct
https://github.com/D-Programming-Language/dmd/pull/915
Commits pushed to master at https://github.com/D-Programming-Language/dmd https://github.com/D-Programming-Language/dmd/commit/81eca37fcb551a9adbec23f9d60c6b1fc90e247d fix Issue 8002 - Excess initial errors when passing template args to non-templated struct https://github.com/D-Programming-Language/dmd/commit/d303d30500689dc4f9c9b60ae4b497549887c2b4 Merge pull request #915 from 9rnsr/fix8002 Issue 8002 - Excess initial errors when passing template args to non-templated struct
AltStyle によって変換されたページ (->オリジナル) / アドレス: モード: デフォルト 音声ブラウザ ルビ付き 配色反転 文字拡大 モバイル