Copied from the GCC bug I reported, because it applies to Intel C++ as well. At least, the version "18" on https://gcc.godbolt.org/.
Intel C++ expects the "override" keyword in an incorrect position in the C++ grammar:
#define MEOW 256
struct Base {
virtual const char (&GetBuffer() const)[MEOW] = 0;
};
struct Derived : public Base {
// Intel C++ requires this incorrect syntax...
virtual const char (&GetBuffer() const override)[MEOW];
// ...but the below is the correct syntax, which Intel C++ rejects.
virtual const char (&GetBuffer() const)[MEOW] override;
};In the C++ Standard, "override" is a virt-specifier in a virt-specifier-seq. virt-specifier-seq optionally goes after the declarator. After the optional virt-specifier-seq goes the optional pure-specifier.