This bizarre program:

struct Foo { explicit Foo() {}; }int main() { Foo foo = foo; cout << "works!"; return 0; }

actually works! Why is this allowed? The only real use-case I know for this is to write:

const int ARRSIZE = 200;int *ptr = malloc(sizeof(ptr) * ARRSIZE);

Still, this seems awfully dodgy. It feels like the C speficiation could allow the use of the left-hand-side name in expression that only need type information while emitting compile time errors for expressions that use the left-hand-side-name as a value .