std.functional.compose compilation error
ZombineDev via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sun Aug 28 00:55:13 PDT 2016
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
More information about the Digitalmars-d-learn
mailing list