December 31, 2004
Is this standard behaviour?

void main()
{
class Foo
{
this()
{
throw new Exception("Exception thrown in constructor");
}
~this()
{
printf("Destructor was called");
}
}

Foo foo = null;

try
{
foo = new Foo();
foo ? printf("Foo is not null\n") : printf("Foo is null\n");
printf("After instantiantion");
}
catch(Exception e)
{
printf("%.*s\n", e.toString());
// foo == null ? <x> : <y> <- causes 'Access Violation'
foo ? printf("Foo is not null\n") : printf("Foo is null\n");
}
}

Output:
Exception thrown in constructor
Foo is null
Destructor was called


December 31, 2004
People need to be forced to untabify all code they post!

> // foo == null ? <x> : <y> <- causes 'Access Violation'

needs to be ' foo is null' , or 'foo === null'.

This was a gotcha for me at first as well, === is testing identity and == is testing equality.

Charlie

"ilitirit" <ilitirit_member@pathlink.com> wrote in message news:cr30fo$2kbi$1@digitaldaemon.com...
> Is this standard behaviour?
>
> void main()
> {
> class Foo
> {
> this()
> {
> throw new Exception("Exception thrown in constructor");
> }
> ~this()
> {
> printf("Destructor was called");
> }
> }
>
> Foo foo = null;
>
> try
> {
> foo = new Foo();
> foo ? printf("Foo is not null\n") : printf("Foo is null\n");
> printf("After instantiantion");
> }
> catch(Exception e)
> {
> printf("%.*s\n", e.toString());
> // foo == null ? <x> : <y> <- causes 'Access Violation'
> foo ? printf("Foo is not null\n") : printf("Foo is null\n");
> }
> }
>
> Output:
> Exception thrown in constructor
> Foo is null
> Destructor was called
>
>