Using Apple's clang as c++ compiler:
In file included from /tmp/cpluspluscheck.KejiIw/test.cpp:3:
./src/include/access/tableam.h:144:16: error: typedef redefinition with
different types ('void (*)(Relation, HeapTuple, Datum *, bool *, bool, void *)'
(aka 'void (*)(RelationData *, HeapTupleData *, unsigned long *, bool *, bool,
void *)') vs 'IndexBuildCallback')
typedef void (*IndexBuildCallback) (Relation index,
^
./src/include/access/tableam.h:36:8: note: previous definition is here
struct IndexBuildCallback;
^
(there are some cascading errors, but this is the important one)
Kinda looks like you can't get away with using "struct" on a forward
declaration of something that is not actually a struct type.
regards, tom lane