Обсуждение: failed to compile a C++ SPI function
Just for fun I changed the extension of my SPI function and trigger
source file from .c to .C and tried to compile it:
> g++ -g -Wall -I /usr/include/postgresql -fPIC -pedantic -c -o bid_control.o bid_control.C
> In file included from /usr/include/postgresql/nodes/relation.h:18,
> from /usr/include/postgresql/executor/spi.h:18,
> from bid_control.h:31,
> from bid_control.C:21:
> /usr/include/postgresql/nodes/parsenodes.h:871: parse error before `typename'
It seems the "typename" word used in the following structure is a
reserved word in C++. (and is appears colored like a type in Vim)
> /*
> * ParamNo - specifies a parameter reference
> */
> typedef struct ParamNo
> {
> NodeTag type;
> int number; /* the number of the parameter */
> TypeName *typename; /* the typecast */ ^^^^^^^^^
> List *indirection; /* array references */
> } ParamNo;
Is it totally unreasonable try C++ in SPI programming?
Cheers,
--
Louis-David Mitterrand - ldm@apartia.org - http://www.apartia.org
Isn't vi that text editor with two modes... one that beeps and one
that corrupts your file?" -- Dan Jocabson, on comp.os.linux.advocacy
I am willing to change it to typname. Any comments?
> Just for fun I changed the extension of my SPI function and trigger
> source file from .c to .C and tried to compile it:
>
> > g++ -g -Wall -I /usr/include/postgresql -fPIC -pedantic -c -o bid_control.o bid_control.C
> > In file included from /usr/include/postgresql/nodes/relation.h:18,
> > from /usr/include/postgresql/executor/spi.h:18,
> > from bid_control.h:31,
> > from bid_control.C:21:
> > /usr/include/postgresql/nodes/parsenodes.h:871: parse error before `typename'
>
> It seems the "typename" word used in the following structure is a
> reserved word in C++. (and is appears colored like a type in Vim)
>
> > /*
> > * ParamNo - specifies a parameter reference
> > */
> > typedef struct ParamNo
> > {
> > NodeTag type;
> > int number; /* the number of the parameter */
> > TypeName *typename; /* the typecast */
> ^^^^^^^^^
> > List *indirection; /* array references */
> > } ParamNo;
>
> Is it totally unreasonable try C++ in SPI programming?
>
> Cheers,
>
>
> --
> Louis-David Mitterrand - ldm@apartia.org - http://www.apartia.org
>
> Isn't vi that text editor with two modes... one that beeps and one
> that corrupts your file?" -- Dan Jocabson, on comp.os.linux.advocacy
>
-- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610)
853-3000+ If your life is a hard drive, | 830 Blythe Avenue + Christ can be your backup. | Drexel Hill,
Pennsylvania19026
Bruce Momjian <pgman@candle.pha.pa.us> writes:
> I am willing to change it to typname. Any comments?
That's hardly the only change you will have to make to get the headers
to pass through a C++ compiler without complaint. How many existing
applications do you want to risk breaking?
ParamNo probably isn't a widely used node type, but there are four
structs with fields named 'typename' and one with a field named 'class'
just in parsenodes.h.
I think that before we start making changes with C++ cleanness as a
goal, we should try to get a precise idea of the extent of the changes
that would be needed, and then estimate how much user code might
reference the fields we'd need to rename.
regards, tom lane
> Bruce Momjian <pgman@candle.pha.pa.us> writes: > > I am willing to change it to typname. Any comments? > > That's hardly the only change you will have to make to get the headers > to pass through a C++ compiler without complaint. How many existing > applications do you want to risk breaking? > > ParamNo probably isn't a widely used node type, but there are four > structs with fields named 'typename' and one with a field named 'class' > just in parsenodes.h. > > I think that before we start making changes with C++ cleanness as a > goal, we should try to get a precise idea of the extent of the changes > that would be needed, and then estimate how much user code might > reference the fields we'd need to rename. Agreed. -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 853-3000+ If your life is a hard drive, | 830 Blythe Avenue + Christ can be your backup. | Drexel Hill, Pennsylvania19026