Thread overview
utils.toBulkString is not accesible from utils
Dec 02, 2015
Andre
Dec 02, 2015
Marc Schütz
Dec 02, 2015
Andre
Dec 03, 2015
Jonathan M Davis
December 02, 2015
Hi,

for following coding there is an error during compilation:

  module utils;

  package string toBulkString(string s)
  {
	  import std.string: format;
	  return "$%s\r\n%s\r\n".format(s.length, s);
  }

  unittest
  {
	  string actual = "foobar".toBulkString();
	  //...
  }

>> source\utils.d(11,39): Error: function utils.toBulkString is not accessible from module utils

The error disappears if I change the visibility attribute from package to private.
This seems to be a bug, is it?

Version: DMD v2.069.0-b2

Kind regards
André
December 02, 2015
On Wednesday, 2 December 2015 at 06:33:36 UTC, Andre wrote:
> Hi,
>
> for following coding there is an error during compilation:
>
>   module utils;
>
>   package string toBulkString(string s)
>   {
> 	  import std.string: format;
> 	  return "$%s\r\n%s\r\n".format(s.length, s);
>   }
>
>   unittest
>   {
> 	  string actual = "foobar".toBulkString();
> 	  //...
>   }
>
>>> source\utils.d(11,39): Error: function utils.toBulkString is not accessible from module utils
>
> The error disappears if I change the visibility attribute from package to private.
> This seems to be a bug, is it?
>
> Version: DMD v2.069.0-b2

I think so, yes. But according to digger, the current behaviour goes back to at least DMD 2.052. Please file a bug report anyway.
December 02, 2015
On Wednesday, 2 December 2015 at 12:37:29 UTC, Marc Schütz wrote:

>
> I think so, yes. But according to digger, the current behaviour goes back to at least DMD 2.052. Please file a bug report anyway.

Bug report filed
https://issues.dlang.org/show_bug.cgi?id=15395
December 03, 2015
On Wednesday, December 02, 2015 06:33:32 Andre via Digitalmars-d-learn wrote:
> Hi,
>
> for following coding there is an error during compilation:
>
>    module utils;
>
>    package string toBulkString(string s)
>    {
>     import std.string: format;
>     return "$%s\r\n%s\r\n".format(s.length, s);
>    }
>
>    unittest
>    {
>     string actual = "foobar".toBulkString();
>     //...
>    }
>
> >> source\utils.d(11,39): Error: function utils.toBulkString is
> >> not accessible from module utils
>
> The error disappears if I change the visibility attribute from
> package to private.
> This seems to be a bug, is it?
>
> Version: DMD v2.069.0-b2
>
> Kind regards
> André

I believe that the problem is that there is no package for toBulkString to be in. utils is a top-level module and is not in a package. Now, arguably it should be an error to use the package attribute in such a module rather than giving an error when you try and use it, but I'm pretty sure that that's the source of your problem. If utils were actually in a package, then it should work.

- Jonathan M Davis