Opened 17 years ago
Closed 17 years ago
#491 closed Bugs (None)
range, VC 7.1, compile error.
| Reported by: | sergey_shandar | Owned by: | Thorsten Ottosen |
|---|---|---|---|
| Milestone: | Component: | None | |
| Version: | None | Severity: | |
| Keywords: | Cc: |
Description
Compiler: VC 7.1
Example:
---------
#include <boost/range/iterator.hpp>
template<class Container>
typename boost::range_iterator<const Container>::type
begin(const Container &X)
{
return 0;
}
int main()
{
char a[3];
int b = begin(a);
return 0;
}
---------
The compile-time error message is
---------
c:\Boost\include\boost-1_33\boost\range\iterator.hpp(37)
: error C2825: 'C::iterator': cannot form a qualified name
main.cpp(12) : see reference to class template
instantiation 'boost::range_iterator<C>' being compiled
with
[
C=char [3]
]
---------
It's a VC 7.1 bug but there is possibility to work
around. Instead of using
C::iterator by default (existing code shown below):
---------
namespace boost
{
namespace detail
{
template< typename C >
struct range_iterator
{
typedef BOOST_DEDUCED_TYPENAME C::iterator type;
};
}
}
---------
Use C::iterator only if C is a class. Code showing the
possible implementation
is shown below
---------
namespace boost
{
namespace detail
{
template< typename C, bool IsClass>
struct range_iterator
{
typedef void type;
};
template< typename C>
struct range_iterator<C, true>
{
typedef BOOST_DEDUCED_TYPENAME C::iterator type;
};
}
}
---------
Note:
See TracTickets
for help on using tickets.
