mirror of
https://github.com/boostorg/iterator.git
synced 2025-07-30 04:47:20 +02:00
Change the way input_output_iterator_tag is convertible to
output_iterator_tag from inheritance to implicit conversion operator, to avoid some tag dispatch ambiguities. [SVN r20868]
This commit is contained in:
@ -37,7 +37,19 @@ namespace boost { struct use_default; }
|
|||||||
namespace boost { namespace detail {
|
namespace boost { namespace detail {
|
||||||
|
|
||||||
struct input_output_iterator_tag
|
struct input_output_iterator_tag
|
||||||
: std::input_iterator_tag, std::output_iterator_tag {};
|
: std::input_iterator_tag
|
||||||
|
{
|
||||||
|
// Using inheritance for only input_iterator_tag helps to avoid
|
||||||
|
// ambiguities when a stdlib implementation dispatches on a
|
||||||
|
// function which is overloaded on both input_iterator_tag and
|
||||||
|
// output_iterator_tag, as STLPort does, in its __valid_range
|
||||||
|
// function. I claim it's better to avoid the ambiguity in these
|
||||||
|
// cases.
|
||||||
|
operator std::output_iterator_tag() const
|
||||||
|
{
|
||||||
|
return std::output_iterator_tag();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
//
|
//
|
||||||
// True iff the user has explicitly disabled writability of this
|
// True iff the user has explicitly disabled writability of this
|
||||||
|
Reference in New Issue
Block a user