コメントではてな記法が使えない様なので日記にて。

ADL

namespace srzw
{
    struct Bar
    {
        int value_;
    };
    void foo(Bar& bar){}
    void foo(){}
}

int main()
{
    srzw::Bar bar;
    foo(bar);       // 省略可能
    srzw::foo();    // 省略するとエラー
    return 0;
}

わー、本当だ!なるほどADLって言うんですね。
remove_ifとかには、たまたまにstd名前空間内のコンテナのイテレータ
を引数で渡してたので省略可能だったと。

非const参照

void foo(int& a){}

int main()
{
    foo(1);
    return 0;
}

本当だ、これもエラーになった!
こういう事(http://q.hatena.ne.jp/1167111891)だったんですね。

C++は確かに仕様が複雑ですねぇ。
細かい部分を知りたかったら英語読解力が必須な気がして来ました……
あー、マゾいマゾい。でもそこが良い。

おまけ

void foo(int& a){}
void bar(std::vector<int>& vec){}

int main()
{
    using namespace std;
    vector<int> baz;
    baz.push_back(10);
    foo(1);                     // VC2005,GCC3.4.4ともにエラー
    bar(vector<int>(baz));        // VC2005は通ってしまう
    return 0;
}

VC2005はコンテナの一時オブジェクトの場合通ってしまいました。