Indeed, this is an invalid C ++ standard, so we must look at the annals of the history of languages to find the point at which it became invalid.
In 1989, when the further definition of “C ++” since its initial creation under this name in 1985, Stroustrup announced that basic initialization had changed from the language of previous incarnations to deal with multiple inheritance: [1]
[p191] The C ++ Programming Language [Stroustrup 1986] describes C ++ as defined and implemented in August 1985. This article describes the growth of the language since then and clarifies several points in the definition. It is emphasized that these language modifications are extensions; C ++ has been and will remain a stable language, suitable for the long-term development of software. The main new features of C ++: multiple inheritance , type-secure communication, better resolution of overloaded functions, recursive definition of assignment and initialization, best features for user memory management, abstract classes, static member of a function, constant functions, protected members, operator overloading -> and pointers to members. These functions are introduced in version 2.0 in C ++.
[p214] The syntax for initializing base classes and members has been extended to deal with multiple inheritance, and the initialization order has been more precisely defined. [..]
This text demonstrates the base class initialization syntax that we are currently familiar with, and as Sneftel already pointed out (saving me the trouble of finding older documents!), This did not happen back in 1985, in the original C ++ implementation , which itself evolved from "C with classes." So, we can conclude that C ++ 2.0 introduced the more familiar syntax in 1989, and this “anachronistic” version was valid until then.
Note, of course, that there is no base in the interrogation code. Thus, even in C ++ 1.0, a program would ultimately not be successfully compiled. However, we found out why the syntax is parsed this way.
Remarkably, GCC diagnoses an obscure, long-forgotten syntax that has not been valid in any C ++ incarnation for nearly thirty years.
[1] "The evolution of C ++: from 1985 to 1989," Bjarne Stroustrup, AT & T Bell Laboratories 1989; pdf