Pure virtual functions are those member functions that are virtual and have the pure-specifier ( = 0;
)
Clause 10.4 paragraph 2 of C++03 tells us what an abstract class is and, as a side note, the following:
[Note: a function declaration cannot provide both a pure-specifier and a definition —end note] [Example:
struct C {
virtual void f() = 0 { }; // ill-formed
};
—end example]
For those who are not very familiar with the issue, please note that pure virtual functions can have definitions but the above-mentioned clause forbids such definitions to appear inline (lexically in-class). (For uses of defining pure virtual functions you may see, for example, this GotW)
Now for all other kinds and types of functions it is allowed to provide an in-class definition, and this restriction seems at first glance absolutely artificial and inexplicable. Come to think of it, it seems such on second and subsequent glances :) But I believe the restriction wouldn't be there if there weren't a specific reason for that.
My question is: does anybody know those specific reasons? Good guesses are also welcome.
Notes:
- MSVC does allow PVF's to have inline definitions. So don't get surprised :)
- the word
inline
in this question does not refer to the inline keyword. It is supposed to mean lexically in-class
virtual void f() = 0 try { } catch(...) { }
– Ornamentvirtual void f() { } = 0;
? I'm going to go with the "given the = 0 syntax, any syntax for this would look awkward" theory. Of course if it was justpure virtual void foo() { }
or similar it would be fine. But that would require yet another keyword. – Discord