On the Arduino language reference page (http://arduino.cc/en/Reference/HomePage), I see that there is no info about structs, typedefs, pointers, references, classes, etc.
Yet, it seems that some of these constructs compile ok? or maybe it's just an impression?
Is there a reference page somewhere which clarifies which C and/or C++ constructs are valid in the Arduino compiler?
Why impossible?
Just don't expect a full PC-like environment, with filesystems and infinite memory.
The Serial and Stream classes mentioned on the reference page use C++ heavily.
Follow the link from the reference page to the AVR runtime library documentation. There are a few features in that runtime library which are optional and not included by the Arduino when it compiles your sketch, but the vast majority are available to you to use - there is an awful lot of stuff there.
The language used by the IDE IS C/C++. The IDE does a few help full things for you, like providing the main function and adding the dec's of serial depending on the processor type. You could all ways use ATMEL STUDIO from the chip maker which is again C/C++.