Annoying module name / typename conflict

Jacob Carlborg doob at me.com
Tue Apr 3 03:20:53 PDT 2012


On 2012-04-03 00:08, H. S. Teoh wrote:
> Code:
> 	// S.d
> 	struct S {
> 		int x;
> 		this(int _x) { x = _x; }
> 	}
>
> 	// test.d
> 	class T {
> 		S s;
> 		this(S _s) { s = _s; }
> 	}
>
> 	void main() {
> 		auto t = new T(S(1)); // this is line 10
> 	}
>
> Compiler error:
>
> test.d(10): Error: function expected before (), not module S of type void
> test.d(10): Error: constructor test.T.this (S _s) is not callable using argument types (_error_)
>
> The error goes away if either struct S or S.d is renamed.
>
> Is there any reason whatsoever that the compiler should resolve "S" to
> the module rather than the struct defined by the eponymous module?
>
> Given that in D, private applies per module, it's quite often desirable
> to name the module after the single class/struct that it defines.
> However, this name conflict makes this scheme rather painful to use. :-(

Hmm, I never had the problem and I do that all the time. Maybe it's 
because I usually have my modules in a package.

-- 
/Jacob Carlborg


More information about the Digitalmars-d mailing list