MultiIndex作者からの返信

Boost.MultiIndex ordered_index/hashed_indexにat()メンバ関数を追加するパッチ


に対する作者からの返信:

ordered indicesのインタフェースはstd::mapではなくstd::setに基づいて設計されているため、at()は実装しない。あなたから提案のあったat()メンバ関数の実装は、std::mapと一致していない:

template<class Key, class T,...> 
class map{ 
  ... 
  const T& at(const key_type& x) const; 
}

注:std::mapがTへの参照を返すのに対し、あなたの実装ではvalue_typeへの参照を返す。
これをBoost.MultiIndexの領域に翻訳することは、value_typeの部分的な参照を返すことを意味する。
それは一般には可能ではない(value_typeがstd::pairで、keyがvalueとうまく分けられるので、std::mapでは可能)。

標準のコンセプトに従って実装するなら、たしかにあの実装だとダメですね。
しかし、現状のままでは、ordered indicesをmapとして扱う場合に不便なことに変わりはないので、別のアプローチを考える必要がありますね。
単なる非メンバ関数による実装だとMultiIndexらしくないので、Policyでなんとかしたい。