C++test supports the following distributions of the GCC compiler:
To use any of these supported distributions, the directory containing the GCC executable must be included in the $PATH environment variable.
TipIn some versions of CygwinTM (for Windows), it is possible to have GCC 2.95.x and GCC 3.x installed at the same time. This is because there are two differently-named executables for GCC 2.95.x and GCC 3.x, so both of them can be located on the $PATH and both will be detected by C++test. |
The following sections detail the GCC compiler extensions that C++test does not currently support. http://gcc.gnu.org/onlinedocs was used as the source of information on GNU compiler extensions.
These limitations also apply to appropriate versions of GCC-based cross-compilers listed in Supported Compilers, other GCC-based cross-compilers, and custom GCC compiler builds.
Arrays of Variable Length as Arguments to Functions
void tester (int len, char data[len][len]) { } |
Complex Numbers
Virtual Functions With Overridden Return Types
class A { public: virtual void* a(); }; class B: public A { public: virtual B* a(); // Return type changed from void* to (compatible) B*. }; |
Function Attributes
void fatal () __attribute__ ((noreturn)); void fatal () { } typedef void voidfn (); volatile voidfn fatal; "void fatal()" |
Member Access Checking
class A { public: void pub_func(); protected: void prot_func(); }; class B : public A { public: void foo() { &A::prot_func; } }; |
Arrays of Variable Length as Arguments to Functions
void tester (int len, char data[len][len]) { } |
Virtual Functions With Overridden Return Types
class A { public: virtual void* a(); }; class B: public A { public: virtual B* a(); // Return type changed from void* to (compatible) B*. }; |
Restricting Pointer Aliasing for Member Functions
class T { public: void fn(); }; void T::fn () __restrict__ { } |
Function Attributes
void fatal () __attribute__ ((noreturn)); void fatal () { } typedef void voidfn (); volatile voidfn fatal; "void fatal()" |
Member Access Checking
class A { public: void pub_func(); protected: void prot_func(); }; class B : public A { public: void foo() { &A::prot_func; } }; |
Attributes After Declarator
class X { public: X(int) {} }; X x(1) __attribute__((aligned (16))); |
Arrays of Variable Length as Arguments to Functions
void tester (int len, char data[len][len]) { } |
Virtual Functions With Overridden Return Types
class A { public: virtual void* a(); }; class B: public A { public: virtual B* a(); // Return type changed from void* to (compatible) B*. }; |
Restricting Pointer Aliasing for Member Functions
class T { public: void fn(); }; void T::fn () __restrict__ { } |
Function Attributes
void fatal () __attribute__ ((noreturn)); void fatal () { } typedef void voidfn (); volatile voidfn fatal; |
Member Access Checking
class A { public: void pub_func(); protected: void prot_func(); }; class B : public A { public: void foo() { &A::prot_func; } }; |
Attributes After Declarator
class X { public: X(int) {} }; X x(1) __attribute__((aligned (16))); |
Arrays of Variable Length as Arguments to Functions
void tester (int len, char data[len][len]) { } |
Virtual Functions With Overridden Return Types
class A { public: virtual void* a(); }; class B: public A { public: virtual B* a(); // Return type changed from void* to (compatible) B*. }; |
Restricting Pointer Aliasing for Member Functions
class T { public: void fn(); }; void T::fn () __restrict__ { } |
Function Attributes
void fatal () __attribute__ ((noreturn)); void fatal () { } typedef void voidfn (); volatile voidfn fatal; |
Arrays of Variable Length as Arguments to Functions
void tester (int len, char data[len][len]) { } |
Virtual Function With Overridden Return Type
class A { public: virtual void* a(); }; class B: public A { public: virtual B* a(); // Return type changed from void* to (compatible) B*. // It is ok in GCC but EDG will complain }; |
Restricting Pointer Aliasing for Member functions
class T { public: void fn(); }; void T::fn () __restrict__ // EDG won't compile this { } |
Function Attributes
void fatal () __attribute__ ((noreturn)); void fatal () { } typedef void voidfn (); volatile voidfn fatal; // EDG: declaration is incompatible with // "void fatal()" |
Friend Declarations
class A; namespace N { class B { friend class A; // In GCC 4.0+ it refer to N::A (which has not been // declared yet) But EDG and older GCCs refer to ::A int _private; }; class A { void foo() { B b; b._private = 0; // EDG inaccessible field. } }; } |
Same as for GCC 4.0.x.
Same as for GCC 4.0.x.
Same as for GCC 4.0.x
Same as for GCC 4.0.x
Same as for GCC 4.0.x
Same as for GCC 4.0.x
Same as for GCC 4.0.x
Same as for GCC 4.0.x
Same as for GCC 4.0.x
Same as for GCC 4.0.x.
Same as for GCC 4.0.x
Missing C++17 features:
N4295 Folding expressions
P0036R0 Unary Folds and Empty Parameter Packs
Same as for GCC 4.0.x.