* RE: Followup -- Re: #define catch?
@ 2000-08-04 9:09 Claude Quezel
0 siblings, 0 replies; 4+ messages in thread
From: Claude Quezel @ 2000-08-04 9:09 UTC (permalink / raw)
To: pthreads-win32
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 679 bytes --]
Scott McCaskill wrote:
> So unless anyone can offer an alternative I will use this.
Seems to me that the problem is specific to MS Visual C++. Why don't you
isolate code for that specific compiler:
#ifdef _MSCVER
// patch here
#else
// normal code here
#endif
And let compliant compiler users free of this patch. Note: I use VC for my
work with pthreads-win32. I don't even know if another compiler can be used
with this package.
Claude
Claude Quézel
mailto:Claude_Quezel@syntell.com
http://www.syntell.com
SYNTELL
Place Iberville IV
Bureau 060
2954, boul. Laurier
Sainte-Foy (Québec) G1V 4T2
Canada
Tél. : (418) 266-0900, poste 317
Téléc. : (418) 266-0899
^ permalink raw reply [flat|nested] 4+ messages in thread
* RE: Followup -- Re: #define catch?
@ 2000-08-04 8:57 Bossom, John
0 siblings, 0 replies; 4+ messages in thread
From: Bossom, John @ 2000-08-04 8:57 UTC (permalink / raw)
To: 'rpj@ise.canberra.edu.au', Scott McCaskill; +Cc: pthreads-win32
I recommend that you catch the exception BY REFERENCE so that
you don't end up with copying...
i.e.)
catch( Pthread_exception & )
Without the & a copy is made implicitly.
-----Original Message-----
From: Ross Johnson [ mailto:rpj@ise.canberra.edu.au ]
Sent: Thursday, August 03, 2000 11:14 PM
To: Scott McCaskill
Cc: pthreads-win32@sourceware.cygnus.com
Subject: Re: Followup -- Re: #define catch?
Scott McCaskill wrote:
>
> Well, after doing some more research, it appears that it *is* legal in C++
> to have multiple catch blocks for the same exception, so apparently this
is
> yet another VC++ bug.
In any case, the library aims to work in it's target environments and so
I'm still seeking a way to handle this that is portable. Unfortunately,
thus far I haven't been able to come up with a neat, clean and
transparent
method.
The best I've come up with for VC++ (leaving the current macro
defined for other compilers) is the following:
#ifdef NEED_ALTCATCHALL
#warning Replace any 'catch(...)' with 'AltCatchAll' if you want \
Pthread-Win32 cancelation and pthread_exit to work.
#define AltCatchAll \
catch(Pthread_exception) { throw; } \
catch(...)
#else
#define catch(e) \
catch(Pthread_exception) { throw; } \
catch(e)
#endif
[I've now grouped internal library exceptions under a single base
class.]
The application code would need this also for portability:
#include <pthread.h>
#if defined(NEED_ALTCATCHALL) && ! defined(AltCatchAll)
#define AltCatchAll catch(...)
#endif
So unless anyone can offer an alternative I will use this.
Ross
>
> ----- Original Message -----
> From: "Scott McCaskill" <scott@3dfx.com>
> To: <pthreads-win32@sourceware.cygnus.com>
> Sent: Wednesday, August 02, 2000 11:49 AM
> Subject: Re: #define catch?
>
> >
> > ----- Original Message -----
> > From: "Bossom, John" <John.Bossom@Cognos.COM>
> > To: "'Ross Johnson'" <rpj@ise.canberra.edu.au>; "Scott McCaskill"
> > <scott@3dfx.com>
> > Cc: <pthreads-win32@sourceware.cygnus.com>
> > Sent: Wednesday, August 02, 2000 10:42 AM
> > Subject: RE: #define catch?
> >
> >
> > > "catch" is actually a keyword in C++...
> > >
> >
> > This is true.. but I don't see what you're getting at. The fundamental
> > problem I encountered is that this (legal) code:
> >
> > catch ( app_exception ) { }
> > catch ( some_other_app_exception ) { }
> >
> > ..will be expanded to the following when using the macro in pthread.h:
> >
> > catch ( Pthread_exception_cancel ) { throw; }
> > catch ( Pthread_exception_exit ) { throw; }
> > catch ( app_exception ) { }
> > catch ( Pthread_exception_cancel ) { throw; }
> > catch ( Pthread_exception_exit ) { throw; }
> > catch ( some_other_app_exception ) { }
> >
> > ..and VC++ will not compile that because of the existence of multiple
> > handlers for Pthread_exception_cancel and Pthread_exception_exit.
> >
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: Followup -- Re: #define catch?
2000-08-03 9:11 ` Followup -- " Scott McCaskill
@ 2000-08-03 20:14 ` Ross Johnson
0 siblings, 0 replies; 4+ messages in thread
From: Ross Johnson @ 2000-08-03 20:14 UTC (permalink / raw)
To: Scott McCaskill; +Cc: pthreads-win32
Scott McCaskill wrote:
>
> Well, after doing some more research, it appears that it *is* legal in C++
> to have multiple catch blocks for the same exception, so apparently this is
> yet another VC++ bug.
In any case, the library aims to work in it's target environments and so
I'm still seeking a way to handle this that is portable. Unfortunately,
thus far I haven't been able to come up with a neat, clean and
transparent
method.
The best I've come up with for VC++ (leaving the current macro
defined for other compilers) is the following:
#ifdef NEED_ALTCATCHALL
#warning Replace any 'catch(...)' with 'AltCatchAll' if you want \
Pthread-Win32 cancelation and pthread_exit to work.
#define AltCatchAll \
catch(Pthread_exception) { throw; } \
catch(...)
#else
#define catch(e) \
catch(Pthread_exception) { throw; } \
catch(e)
#endif
[I've now grouped internal library exceptions under a single base
class.]
The application code would need this also for portability:
#include <pthread.h>
#if defined(NEED_ALTCATCHALL) && ! defined(AltCatchAll)
#define AltCatchAll catch(...)
#endif
So unless anyone can offer an alternative I will use this.
Ross
>
> ----- Original Message -----
> From: "Scott McCaskill" <scott@3dfx.com>
> To: <pthreads-win32@sourceware.cygnus.com>
> Sent: Wednesday, August 02, 2000 11:49 AM
> Subject: Re: #define catch?
>
> >
> > ----- Original Message -----
> > From: "Bossom, John" <John.Bossom@Cognos.COM>
> > To: "'Ross Johnson'" <rpj@ise.canberra.edu.au>; "Scott McCaskill"
> > <scott@3dfx.com>
> > Cc: <pthreads-win32@sourceware.cygnus.com>
> > Sent: Wednesday, August 02, 2000 10:42 AM
> > Subject: RE: #define catch?
> >
> >
> > > "catch" is actually a keyword in C++...
> > >
> >
> > This is true.. but I don't see what you're getting at. The fundamental
> > problem I encountered is that this (legal) code:
> >
> > catch ( app_exception ) { }
> > catch ( some_other_app_exception ) { }
> >
> > ..will be expanded to the following when using the macro in pthread.h:
> >
> > catch ( Pthread_exception_cancel ) { throw; }
> > catch ( Pthread_exception_exit ) { throw; }
> > catch ( app_exception ) { }
> > catch ( Pthread_exception_cancel ) { throw; }
> > catch ( Pthread_exception_exit ) { throw; }
> > catch ( some_other_app_exception ) { }
> >
> > ..and VC++ will not compile that because of the existence of multiple
> > handlers for Pthread_exception_cancel and Pthread_exception_exit.
> >
^ permalink raw reply [flat|nested] 4+ messages in thread
* Followup -- Re: #define catch?
2000-08-02 9:50 ` Scott McCaskill
@ 2000-08-03 9:11 ` Scott McCaskill
2000-08-03 20:14 ` Ross Johnson
0 siblings, 1 reply; 4+ messages in thread
From: Scott McCaskill @ 2000-08-03 9:11 UTC (permalink / raw)
To: pthreads-win32
Well, after doing some more research, it appears that it *is* legal in C++
to have multiple catch blocks for the same exception, so apparently this is
yet another VC++ bug.
----- Original Message -----
From: "Scott McCaskill" <scott@3dfx.com>
To: <pthreads-win32@sourceware.cygnus.com>
Sent: Wednesday, August 02, 2000 11:49 AM
Subject: Re: #define catch?
>
> ----- Original Message -----
> From: "Bossom, John" <John.Bossom@Cognos.COM>
> To: "'Ross Johnson'" <rpj@ise.canberra.edu.au>; "Scott McCaskill"
> <scott@3dfx.com>
> Cc: <pthreads-win32@sourceware.cygnus.com>
> Sent: Wednesday, August 02, 2000 10:42 AM
> Subject: RE: #define catch?
>
>
> > "catch" is actually a keyword in C++...
> >
>
> This is true.. but I don't see what you're getting at. The fundamental
> problem I encountered is that this (legal) code:
>
> catch ( app_exception ) { }
> catch ( some_other_app_exception ) { }
>
> ..will be expanded to the following when using the macro in pthread.h:
>
> catch ( Pthread_exception_cancel ) { throw; }
> catch ( Pthread_exception_exit ) { throw; }
> catch ( app_exception ) { }
> catch ( Pthread_exception_cancel ) { throw; }
> catch ( Pthread_exception_exit ) { throw; }
> catch ( some_other_app_exception ) { }
>
> ..and VC++ will not compile that because of the existence of multiple
> handlers for Pthread_exception_cancel and Pthread_exception_exit.
>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2000-08-04 9:09 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2000-08-04 9:09 Followup -- Re: #define catch? Claude Quezel
-- strict thread matches above, loose matches on Subject: below --
2000-08-04 8:57 Bossom, John
2000-08-02 8:42 Bossom, John
2000-08-02 9:50 ` Scott McCaskill
2000-08-03 9:11 ` Followup -- " Scott McCaskill
2000-08-03 20:14 ` Ross Johnson
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).