C++訳分からなすぎワロタ (3) typename がウザい

template<typename K, typename V>
class LockedMap {
public:
    typedef std::map<K,V> Map;
    typedef typename Map::value_type value_type;
    typedef typename Map::const_iterator const_iterator;
private:
    Map map0;
    boost::mutex mtx;
public:
    const_iterator find(const value_type &p) {
        boost::scoped_lock lk(mtx);
        return map0.find(p);
    }
};

いくら依存名だからと言って typedef のところで typename が必要なのはおかしいだろ常考.どうにかしてほしい.
まぁ(C言語の時代から)文法的には typedefstatic やら volatile と同格の "storage class specifier" か何かだった気がするので,その辺の事情かな...

追記: volatile は cv-qualifier だった... 代わりに externで.あと「文法的には typename は」って書いてたのは間違い.こんな私にC/C++を使う資格は無くて,FORTRANでリスト処理を「やる (DO) 」刑に処されても文句は言えない.

ついでに .NET Framework に噛まれた話もしておこう

(実は先週末の話なんだが)

ExceptionCondition
ArgumentNullExceptiontext is null or Empty.

なんで Clipboard.SetText("")Clipboard.SetText(null) と同じ扱いで例外を投げるんだよ... STA (Single Thread Apartment) 問題の関係で null が渡ってるのかと誤認して試行錯誤の挙げ句,1時間近く無駄にしてしまったのだった.結局こうした:

if (String.IsNullOrEmpty(str))
    Clipboard.Clear();
else
    Clipboard.SetText(str);

もしかしてCOMのマーシャリングとか深い問題が裏に潜んでたりするのか? いや全然知らないんだけどさ.