A
Alex Vinokur
Hi,
Is it possible to use std::distance() for pointers to data members?
Thanks
------ foo. cpp ------
#include <iterator>
struct Foo
{
char m_ch1;
char m_ch2;
};
int main()
{
char (Foo::* p1) = &Foo::m_ch1;
char (Foo::* p2) = &Foo::m_ch2;
std::distance(p1, p2);
return 0;
}
---------------
Compiler aCC: HP C/aC++ B3910B A.06.25.01 [May 16 2010]
"/opt/aCC/include_std/rw/iterator", line 99: error #2276: name
followed by "::" must be a class or namespace name
typedef _TYPENAME _Iterator::value_type value_type;
^
detected during instantiation of class
"std::iterator_traits<_Iterator> [with _Iterator=char Foo::*]" at line
14 of "foo.cpp"
"/opt/aCC/include_std/rw/iterator", line 100: error #2276: name
followed by "::" must be a class or namespace name
typedef _TYPENAME _Iterator::difference_type difference_type;
^
detected during instantiation of class
"std::iterator_traits<_Iterator> [with _Iterator=char Foo::*]" at line
14 of "foo.cpp"
"/opt/aCC/include_std/rw/iterator", line 101: error #2276: name
followed by "::" must be a class or namespace name
typedef _TYPENAME _Iterator:ointer pointer;
^
detected during instantiation of class
"std::iterator_traits<_Iterator> [with _Iterator=char Foo::*]" at line
14 of "foo.cpp"
"/opt/aCC/include_std/rw/iterator", line 102: error #2276: name
followed by "::" must be a class or namespace name
typedef _TYPENAME _Iterator::reference reference;
^
detected during instantiation of class
"std::iterator_traits<_Iterator> [with _Iterator=char Foo::*]" at line
14 of "foo.cpp"
"/opt/aCC/include_std/rw/iterator", line 103: error #2276: name
followed by "::" must be a class or namespace name
typedef _TYPENAME _Iterator::iterator_category
iterator_category;
^
detected during instantiation of class
"std::iterator_traits<_Iterator> [with _Iterator=char Foo::*]" at line
14 of "foo.cpp"
5 errors detected in the compilation of "foo.cpp".
Is it possible to use std::distance() for pointers to data members?
Thanks
------ foo. cpp ------
#include <iterator>
struct Foo
{
char m_ch1;
char m_ch2;
};
int main()
{
char (Foo::* p1) = &Foo::m_ch1;
char (Foo::* p2) = &Foo::m_ch2;
std::distance(p1, p2);
return 0;
}
---------------
Compiler aCC: HP C/aC++ B3910B A.06.25.01 [May 16 2010]
"/opt/aCC/include_std/rw/iterator", line 99: error #2276: name
followed by "::" must be a class or namespace name
typedef _TYPENAME _Iterator::value_type value_type;
^
detected during instantiation of class
"std::iterator_traits<_Iterator> [with _Iterator=char Foo::*]" at line
14 of "foo.cpp"
"/opt/aCC/include_std/rw/iterator", line 100: error #2276: name
followed by "::" must be a class or namespace name
typedef _TYPENAME _Iterator::difference_type difference_type;
^
detected during instantiation of class
"std::iterator_traits<_Iterator> [with _Iterator=char Foo::*]" at line
14 of "foo.cpp"
"/opt/aCC/include_std/rw/iterator", line 101: error #2276: name
followed by "::" must be a class or namespace name
typedef _TYPENAME _Iterator:ointer pointer;
^
detected during instantiation of class
"std::iterator_traits<_Iterator> [with _Iterator=char Foo::*]" at line
14 of "foo.cpp"
"/opt/aCC/include_std/rw/iterator", line 102: error #2276: name
followed by "::" must be a class or namespace name
typedef _TYPENAME _Iterator::reference reference;
^
detected during instantiation of class
"std::iterator_traits<_Iterator> [with _Iterator=char Foo::*]" at line
14 of "foo.cpp"
"/opt/aCC/include_std/rw/iterator", line 103: error #2276: name
followed by "::" must be a class or namespace name
typedef _TYPENAME _Iterator::iterator_category
iterator_category;
^
detected during instantiation of class
"std::iterator_traits<_Iterator> [with _Iterator=char Foo::*]" at line
14 of "foo.cpp"
5 errors detected in the compilation of "foo.cpp".