次のコードがあります (MSVC9 でブースト 1.55 を使用):
struct pair_first_impl
{
template<class TPair> struct result { typedef typename TPair::first_type type; };
template<class TPair>
typename TPair::first_type const& operator() (TPair const& pair) const
{
return pair.first;
}
template<class TPair>
typename TPair::first_type& operator() (TPair& pair)
{
return pair.first;
}
};
static phx::function<pair_first_impl> pair_first;
int test()
{
std::map<int, std::string> mymap;
std::find_if(mymap.begin(), mymap.end(), pair_first(_1) == 1);
}
pair_first_impl::result::type
に関して、次のようなコンパイラ エラーが発生します。
error C2825: 'TPair': must be a class or namespace when followed by '::'
see reference to class template instantiation 'pair_first_impl::result<TPair>' being compiled
with
[
TPair=const pair_first_impl (std::pair<const int,std::string> )
]
何らかの理由で、型を直接TPair
ではなく、関数型 (?) をテンプレート引数に渡しているようです。std::pair
ここで私が間違っていることを理解するのを手伝ってくれる人はいますか?