Why is a cast needed here?
Dave
Dave_member at pathlink.com
Sun Nov 26 11:06:03 PST 2006
Chris Miller wrote:
>> "Dave" <Dave_member at pathlink.com> wrote in message
>> news:eka11i$15v4$1 at digitaldaemon.com...
>>> import std.socket;
>>>
>>> void main()
>>> {
>>> //Socket s = new
>>> Socket(AddressFamily.INET,SocketType.STREAM,ProtocolType.TCP);
>>> Socket s = new
>>> Socket(cast(AddressFamily)AddressFamily.INET,SocketType.STREAM,ProtocolType.TCP);
>>>
>>> }
>>>
>>> Why is the 'cast(AddressFamily)' needed?
>>>
>>> W/o the cast:
>>>
>>> t.d(5): constructor std.socket.Socket.this () does not match parameter
>>> types (int,SocketType,ProtocolType)
>>> t.d(5): Error: cannot implicitly convert expression (2) of type int to
>>> AddressFamily
>>> t.d(5): Error: cannot implicitly convert expression (6) of type
>>> ProtocolType to char[]
>>> t.d(5): Error: cannot cast int to char[]
>>>
>>> Thanks!
>
> On Sun, 26 Nov 2006 05:25:33 -0500, Daniel Giddings
> <daniel.giddings at gmail.com> wrote:
>
>> Looks like its a bug in 0.175, I've just needed to add the same casts
>> to my
>> code. It's a compiler issue rather than a lib issue, as the SocketType
>> and
>> ProtocolType are declared as enums in the same way, but don't need the
>> cast.
>>
>> :-) Dan
>
> I run into this issue with other code as well. I think it has to do with
> different enums used by overloaded functions.
Here's a minimal test-case. I'll formalize it w/ a bug report.
void main()
{
// foo f = new foo(cast(AddressFamily)AddressFamily.INET);
foo f = new foo(AddressFamily.INET);
}
class foo
{
this(AddressFamily f)
{
}
}
// from std.c.linux.socket
enum: int
{
AF_INET = 2
}
// from std.c.linux.socket
struct sockaddr_in
{
short sin_family = AF_INET;
}
// from std.socket
enum AddressFamily: int
{
INET = AF_INET
}
More information about the Digitalmars-d-learn
mailing list