namespace std
に宣言/定義を追加すると、未定義の動作が発生することは広く知られています。この規則の唯一の例外は、テンプレートの特殊化です。
次の「ハック」はどうですか?
#include <iostream>
namespace std_
{
void Foo()
{
std::clog << "Hello World!" << std::endl;
}
using namespace std;
}
int main()
{
namespace std = std_;
std::Foo();
}
標準に関する限り、これは本当に明確に定義されていますか? この場合、もちろん、実際には何も追加していませんnamespace std
。これをテストしたすべてのコンパイラは、これを喜んで飲み込んでいるようです。
誰かが「どうしてそんなことをするの?」に似たコメントをする前に。-- これは私の好奇心を満たすためです...