@@ -108,44 +108,60 @@ class BOOST_URI_DECL uri {
108
108
return uri_parts_.fragment ? uri_parts_.fragment .get () :const_range_type ();
109
109
}
110
110
111
+ // hackfix by Simon Haegler, Esri R&D Zurich
112
+ // this workaround is needed to avoid running into the "incompatible string iterator" assertion
113
+ // triggered by the default-constructed string iterators employed by cpp-netlib (see uri.ipp qi::rule declarations)
114
+ #if defined(_MSC_VER) && defined(_DEBUG)
115
+ #define CATCH_EMPTY_ITERATOR_RANGE if (range.begin()._Getcont() ==0 || range.end()._Getcont() ==0 ) {return string_type (); }
116
+ #else
117
+ #define CATCH_EMPTY_ITERATOR_RANGE
118
+ #endif
119
+
111
120
string_typescheme ()const {
112
121
const_range_type range =scheme_range ();
113
- return range ?string_type (boost::begin (range),boost::end (range))
122
+ CATCH_EMPTY_ITERATOR_RANGE
123
+ return range ?string_type (boost::begin (range),boost::end (range))
114
124
:string_type ();
115
125
}
116
126
117
127
string_typeuser_info ()const {
118
128
const_range_type range =user_info_range ();
129
+ CATCH_EMPTY_ITERATOR_RANGE
119
130
return range ?string_type (boost::begin (range),boost::end (range))
120
131
:string_type ();
121
132
}
122
133
123
134
string_typehost ()const {
124
135
const_range_type range =host_range ();
136
+ CATCH_EMPTY_ITERATOR_RANGE
125
137
return range ?string_type (boost::begin (range),boost::end (range))
126
138
:string_type ();
127
139
}
128
140
129
141
string_typeport ()const {
130
142
const_range_type range =port_range ();
143
+ CATCH_EMPTY_ITERATOR_RANGE
131
144
return range ?string_type (boost::begin (range),boost::end (range))
132
145
:string_type ();
133
146
}
134
147
135
148
string_typepath ()const {
136
149
const_range_type range =path_range ();
150
+ CATCH_EMPTY_ITERATOR_RANGE
137
151
return range ?string_type (boost::begin (range),boost::end (range))
138
152
:string_type ();
139
153
}
140
154
141
155
string_typequery ()const {
142
156
const_range_type range =query_range ();
157
+ CATCH_EMPTY_ITERATOR_RANGE
143
158
return range ?string_type (boost::begin (range),boost::end (range))
144
159
:string_type ();
145
160
}
146
161
147
162
string_typefragment ()const {
148
163
const_range_type range =fragment_range ();
164
+ CATCH_EMPTY_ITERATOR_RANGE
149
165
return range ?string_type (boost::begin (range),boost::end (range))
150
166
:string_type ();
151
167
}