erro: inicializador de classe base anacrônico à moda antiga

O código a seguir produz o erro de compilação subsequente em todas as versões do GCC que tentei nos modos C ++ 98, C ++ 11 e C ++ 14:

struct T
{
    T(void* x) : (x) {}
};

// main.cpp: In constructor 'T::T(void*)':
// main.cpp:3:18: error: anachronistic old-style base class initializer [-fpermissive]
//      T(void* x) : (x) {}
//                   ^
// main.cpp:3:16: error: unnamed initializer for 'T', which has no base classes
//      T(void* x) : (x) {}

Claro, é um código claramente quebrado, porque na verdade não estou inicializando nada.

Mas por que é um inicializador de classe base e por que é "anacrônico", em vez de simplesmente errado? Foi uma vez válido? Quando? E o que isso significava?

oapenas relreferências atadas Descobri que, na web, houve pessoas que encontraram o erro quando um nome de membro foi acidentalmente apagado, resultando efetivamente no mesmo código acima:

#define bar
// ^ some library could have done this

struct T
{
    T(int x)
        : bar(x)   // effectively just `: (x)`
    {}

    int bar;       // will cause its own error
};

Essas pessoas nunca descobriram o que significava o erro, embora mais tarde descobrissem por que seu programa foi interrompido.

questionAnswers(3)

yourAnswerToTheQuestion