clang не компилирует третий вызов typeid ниже (см. живой пример). Но я не вижу ничего в п. 5.2.8, который запрещает это, особенно если учесть, что выражение B::f не является glvalue типа полиморфного класса (см. Пункт 3). Кроме того, согласно этому параграфу выражение B::f является неоцененным операндом, и как таковой, вызов typeid(B::f) должен компилироваться. Обратите внимание, что GCC не компилирует ни один из вызовов typeid ниже:
#include <iostream>
#include <typeinfo>
struct A{ int i; };
struct B{ int i; void f(); };
int main()
{
std::cout << typeid(A::i).name() << '\n';
std::cout << typeid(B::i).name() << '\n';
std::cout << typeid(B::f).name() << '\n';
}