about TR1 in vc++2008express
I am trying to build following code but got errors. How to fix this
issue? Thanks !
#include <functional>
#include <algorithm>
#include <iostream>
#include <string>
#include <cmath>
#include <map>
class point {
public:
point(double x, double y) : m_x(x), m_y(y) { }
double mag() const {return sqrt(m_x * m_x + m_y * m_y); }
double dist(const point& p) const {
return sqrt(pow(m_x - p.m_x, 2)+ pow(m_y - p.m_y, 2));
}
private:
double m_x;
double m_y;
};
void test_mem_fun_point_to_data_member()
{
std::map<std::string, bool> m;
m["cat"] = true;
m["dog"] = false;
m["kitty"] = true;
std::cout << count_if(m.begin(), m.end(),
std::tr1::mem_fn(&std::pair<std::string,
bool>::second))
<< std::endl;
}
void main()
{
test_mem_fun_point_to_data_member();
}
------ Build started: Project: TestTR1, Configuration: Debug Win32 ------
1>Compiling...
1>mem_fun.cpp
1>d:\program files\microsoft visual studio 9.0\vc\include
\xrefwrap(71) : error C2100: illegal indirection
1> d:\program files\microsoft visual studio 9.0\vc\include
\xrefwrap(78) : see reference to function template instantiation '_Ret
std::tr1::_Pmd_caller<_Ret,_Arg0>::_Call_pmd<_Pmd,_Farg0&>(volatile
const void *,_Pmd,std::pair<_Ty1,_Ty2>)' being compiled
1> with
1> [
1> _Ret=_Ret,
1> _Arg0=std::pair<std::string,bool>,
1> _Pmd=bool std::pair<std::string,bool>::* const ,
1> _Farg0=std::pair<const std::string,bool>,
1> _Ty1=const std::string,
1> _Ty2=bool
1> ]
1> d:\program files\microsoft visual studio 9.0\vc\include
\xrefwrap(174) : see reference to function template instantiation
'_Ret std::tr1::_Pmd_caller<_Ret,_Arg0>::_Apply_pmd<const
_Ty,std::pair<_Ty1,_Ty2>>(_Pmd,_Farg0 &)' being compiled
1> with
1> [
1> _Ret=_Ret,
1> _Arg0=std::pair<std::string,bool>,
1> _Ty=bool std::pair<std::string,bool>::* const ,
1> _Ty1=const std::string,
1> _Ty2=bool,
1> _Pmd=bool std::pair<std::string,bool>::* const ,
1> _Farg0=std::pair<const std::string,bool>
1> ]
1> d:\program files\microsoft visual studio 9.0\vc\include
\xxcallwrap(13) : see reference to function template instantiation
'_Ret
std::tr1::_Callable_pmd<_Ty,_Memty,_Indirect>::_ApplyX<_Ret,_Carg0>(_Arg0
&) const' being compiled
1> with
1> [
1> _Ret=_Ret,
1> _Ty=bool std::pair<std::string,bool>::* const ,
1> _Memty=std::pair<std::string,bool>,
1> _Indirect=false,
1> _Carg0=std::pair<const std::string,bool>,
1> _Arg0=std::pair<const std::string,bool>
1> ]
1> d:\program files\microsoft visual studio 9.0\vc\include
\algorithm(176) : see reference to function template instantiation
'bool &std::tr1::_Call_wrapper<_Callable>::operator
()<std::pair<_Ty1,_Ty2>>(_Carg0 &) const' being compiled
1> with
1> [
1> _Callable=std::tr1::_Callable_pmd<bool
std::pair<std::string,bool>::*
const ,std::pair<std::string,bool>,false>,
1> _Ty1=const std::string,
1> _Ty2=bool,
1> _Carg0=std::pair<const std::string,bool>
1> ]
1> d:\program files\microsoft visual studio 9.0\vc\include
\algorithm(186) : see reference to function template instantiation
'__w64 int
std::_Count_if<std::_Tree<_Traits>::iterator,_Pr>(_InIt,_InIt,_Pr)'
being compiled
1> with
1> [
1>
_Traits=std::_Tmap_traits<std::string,bool,std::less<std::string>,std::allocator<std::pair<const
std::string,bool>>,false>,
1> _Pr=std::tr1::_Call_wrapper<std::tr1::_Callable_pmd<bool
std::pair<std::string,bool>::*
const ,std::pair<std::string,bool>,false>>,
1>
_InIt=std::_Tree<std::_Tmap_traits<std::string,bool,std::less<std::string>,std::allocator<std::pair<const
std::string,bool>>,false>>::iterator
1> ]
1> d:\users\administrator\documents\visual studio 2008\projects
\testtr1\testtr1\mem_fun.cpp(28) : see reference to function template
instantiation '__w64 int
std::count_if<std::_Tree<_Traits>::iterator,std::tr1::_Call_wrapper<_Callable>>(_InIt,_InIt,_Pr)'
being compiled
1> with
1> [
1>
_Traits=std::_Tmap_traits<std::string,bool,std::less<std::string>,std::allocator<std::pair<const
std::string,bool>>,false>,
1> _Callable=std::tr1::_Callable_pmd<bool
std::pair<std::string,bool>::*
const ,std::pair<std::string,bool>,false>,
1>
_InIt=std::_Tree<std::_Tmap_traits<std::string,bool,std::less<std::string>,std::allocator<std::pair<const
std::string,bool>>,false>>::iterator,
1> _Pr=std::tr1::_Call_wrapper<std::tr1::_Callable_pmd<bool
std::pair<std::string,bool>::*
const ,std::pair<std::string,bool>,false>>
1> ]
1>d:\program files\microsoft visual studio 9.0\vc\include
\xrefwrap(71) : error C2440: 'newline' : cannot convert from
'std::pair<_Ty1,_Ty2> *' to 'std::pair<_Ty1,_Ty2> *'
1> with
1> [
1> _Ty1=const std::string,
1> _Ty2=bool
1> ]
1> and
1> [
1> _Ty1=std::string,
1> _Ty2=bool
1> ]
1> Types pointed to are unrelated; conversion requires
reinterpret_cast, C-style cast or function-style cast
1>d:\program files\microsoft visual studio 9.0\vc\include
\xrefwrap(71) : error C2647: '.*' : cannot dereference a 'bool
std::pair<_Ty1,_Ty2>::* ' on a 'std::pair<_Ty1,_Ty2>'
1> with
1> [
1> _Ty1=std::string,
1> _Ty2=bool
1> ]
1> and
1> [
1> _Ty1=const std::string,
1> _Ty2=bool
1> ]
1>Build log was saved at "file://d:\Users\Administrator\Documents
\Visual Studio 2008\Projects\TestTR1\TestTR1\Debug\BuildLog.htm"
1>TestTR1 - 3 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped
==========