visual c++ compile error when included spi.h and trigger.h

Started by mingsofttabout 16 years ago2 messages
#1mingsoftt
mingsoftt@singnet.com.sg

hi there,
i have trouble compiling a c style program ( filename with extension cpp) written for visual C++.
When i added the following #includes,

#include "spi.h"
#include "trigger.h"

compilation errors say "error C2899: typename cannot be used outside a template declaration".
I need the above includes for postgres triggers.

If the above #includes were removed, leaving behind

#include "postgres.h"
#include "fmgr.h"

then there is no compilation error.

A check on msdn reveals that the error is because in visual c++, the word "typename" is a keyword.
Unfortunately, it happens ( coincidence) that postgres also uses the word "typename" in its header files, as in below -
typedef struct ColumnDef
{
NodeTag type;
char *colname; /* name of column */
TypeName *typename; /* type of column */
...
}

I have thought of making visual c++ of not recognizing "typename" as a keyword, say, by turning some compiler options to forced c mode ( rather than c++).
Is there indeed such an option? If not, is there a way to resolve my problem as described above?

Would appreciate any help ...

thanks and regards,
baluku

#2Peter Eisentraut
peter_e@gmx.net
In reply to: mingsoftt (#1)
Re: visual c++ compile error when included spi.h and trigger.h

On Thu, 2009-10-15 at 17:44 +0800, mingsoftt wrote:

I have thought of making visual c++ of not recognizing "typename" as a
keyword, say, by turning some compiler options to forced c mode
( rather than c++).
Is there indeed such an option? If not, is there a way to resolve my
problem as described above?

Wait for 8.5. Before that, server header files are not C++ safe. What
you discovered is only one of several problems.