On 09/11/2010 23:57, Simen kjaeraas wrote:
Adam Burton <[email protected]> wrote:
Hi,
should the below work?
struct A
{
public this(B b) {}
}
struct B {}
void foo(A a) {}
void main()
{
B b;
foo(b); // Fails
}
The constructor parameter doesn't need to be a struct, it could be an
int.
The workaround is to explicity call the constructor.
Far as I know, that's not supposed to work, no. Guess it has to do with
overloading:
struct foo {
this( int n ){}
}
void bar( foo f ) {}
void bar( int n ) {}
bar( 3 ); // which do I call?
This does work in C++.
As for D, dunno. There are arguments both ways and this is why C++ has
the 'explicit' keyword. The 'explicit' keyword specifically stops the
example compiling.
So they kinda work the same way but from opposite ends.
For me, I prefer the D way; in my code at work the 'explicit' keyword
seems to confuse a lot of people.
--
My enormous talent is exceeded only by my outrageous laziness.
http://www.ssTk.co.uk