I would expect that if foo is declared in class D, but not marked virtual, then the following code would call the implementation of foo
foo
D
Quick answer may be no, but correct answer is yes
C++ doesn't know about function hiding, so overriding virtual function without virtual keyword marks that function virtual too.