Ok - perhaps we can simulate current behavior with:

typedef char* VecType;
typedef const char* ConstVecType;

and use VecType/ConstVecType as needed in code?

Satish

On Wed, 27 Oct 2010, Barry Smith wrote:

> 
>   Satish,
> 
>     We already had this fight and this change lost. Making this change means 
> that one can never build a VecType on the fly, so all VecType must be 
> declared at compile time which defeats the entire purpose of PETSc.
> 
>    I don't understand why "const" is scoped differently for a macro than for 
> the typedef." but it seems to me an annoying feature of C.
> 
>    Barry
> 
> 
> On Oct 27, 2010, at 5:08 PM, Satish Balay wrote:
> 
> > On Wed, 27 Oct 2010, Barry Smith wrote:
> > 
> >> 
> >> On Oct 27, 2010, at 4:48 PM, Jed Brown wrote:
> >> 
> >>> On Wed, Oct 27, 2010 at 17:45, Barry Smith <bsmith at mcs.anl.gov> wrote:
> >>> hmm, is there any reason we can't/shouldn't use a typedef for our VecType 
> >>> (and its many friends)?
> >>> 
> >>> I think the issue is because "const" is scoped differently for a macro 
> >>> than for the typedef.
> >>> 
> >>> typedef char *Foo;
> >>> 
> >>> now "const Foo" means "char *const" instead of "const char *".
> >> 
> >>  Damn, damn, damn, damn,
> > 
> > -#define VecType char*
> > +typedef const char* VecType;
> > 
> > -EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGetType(Vec, const VecType *);
> > +EXTERN PetscErrorCode PETSCVEC_DLLEXPORT VecGetType(Vec, VecType *);
> > 
> > The above type of change [i.e 'const VecType' to 'VecType'] gets
> > src/vec/vec/interface sources compiled..
> > 
> > Satish
> 
> 


Reply via email to