On Thursday, 25 August 2016 at 21:01:29 UTC, Antonio Corbi wrote:
On Thursday, 25 August 2016 at 14:30:00 UTC, Meta wrote:
On Thursday, 25 August 2016 at 14:06:32 UTC, Antonio Corbi wrote:
Hello,

Trying to compile this example from Chuck Allison:
-------------------------------------------
import std.stdio;
import std.functional;

void main() {
    auto div3 = (double x) => x/3.0;
    auto sq = (double x) => x*x;
    auto pls1 = (double x) => x+1.0;
    alias compose!(div3,sq,pls1) comp;
    writeln(comp(2.0)); // 3 == (2.0+1.0)^^2 / 3.0
    alias pipe!(div3,sq,pls1) pip;
    writeln(pip(2.0));  // 1.44444 == (2.0/3.0)^^2 + 1.0
}
--------------------------------------------

I get this error (with DMD64 D Compiler v2.071.1 in linux):

compose.d(8): Error: template instance compose!(div3, sq, pls1) compose is not a template declaration, it is a module

But the error disappears if I use this import:
   import std.functional:compose,pipe;

Is this a bug or is it the expected behaviour under the recent 'import' changes?
Thanks!

Try renaming your source file to something other than compose.d, I think that's confusing the compiler.

Yep, that did the trick!

I also noticed that 'old' compilers like:

- gdc: gdc (GCC) 6.1.1 20160501
- ldc: LDC - the LLVM D compiler (1.0.0): based on DMD v2.070.2 and LLVM 3.8.0

*do* compile the original code posted without error.

Thank's to all of you for your answers.

Since DMD 2.071 the compiler has become more strict about the use of imports. See the changelog for more info:
http://dlang.org/changelog/2.071.0.html

Reply via email to