std.functional.compose compilation error

Antonio Corbi via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Aug 25 14:01:29 PDT 2016


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.



More information about the Digitalmars-d-learn mailing list