コンパイラや標準ライブラリベンダが使用する識別子について質問です

どうやら以下の条件を満たす識別子は使ってはいけないみたいですが
1 _で始まり、大文字が続く名前
2 __(アンダースコア2こ)を含む名前
3 グローバルスコープで _で始まる名前

ケースA int _Hoge;//ダメ(1に抵触)
ケースB int __hoge;//ダメ(2,3に抵触)
ケースC int hoge__hige;//ダメ(2に抵触)
ケースD int _hoge;//ダメ(3に抵触)
ケースE namespace foo{ _hoge;} //これはok?
ケースF class Hage{ int _hoge;} //これはok?

ケースEとFが合法なのかどうかわかりません

この辺を指摘(警告とか)してくれるコンパイラとかないんですかね