In [class.derived.general]/1 we have the following definitions for base-specifier:
base-specifier:
attribute-specifier-seqopt class-or-decltype
attribute-specifier-seqopt virtual access-specifieropt class-or-decltype
attribute-specifier-seqopt access-specifier virtualopt class-or-decltype
Why do we need the second and the third definitions above? Why is the virtual required in the second definition while it's optional in the third?