gpt4 book ai didi

c++ - 为什么 std::istreambuf_iterator 无法 boost SinglePass Iterator 概念检查?

转载 作者:搜寻专家 更新时间:2023-10-31 01:56:30 25 4
gpt4 key购买 nike

以下程序:

#include <boost/range/concepts.hpp>
#include <iterator>
#include <istream>

using boost::range_detail::SinglePassIteratorConcept;


int main()
{
BOOST_CONCEPT_ASSERT(( SinglePassIteratorConcept<std::istreambuf_iterator<char>> ));
}

无法同时使用 MSVC 和 gcc 进行编译。 MSVC报错如下:

D:\libraries\boost\boost/range/concepts.hpp(157) : error C2440: 'initializing' : cannot convert from 'char' to 'char &'
D:\libraries\boost\boost/range/concepts.hpp(147) : while compiling class template member function 'boost::range_detail::SinglePassIteratorConcept<Iterator>::~SinglePassIteratorConcept(void)'
with
[
Iterator=std::istreambuf_iterator<char,std::char_traits<char>>
]
D:\libraries\boost\boost/concept/detail/has_constraints.hpp(42) : see reference to class template instantiation 'boost::range_detail::SinglePassIteratorConcept<Iterator>' being compiled
with
[
Iterator=std::istreambuf_iterator<char,std::char_traits<char>>
]
D:\libraries\boost\boost/concept/detail/msvc.hpp(58) : see reference to class template instantiation 'boost::concepts::not_satisfied<Model>' being compiled
with
[
Model=boost::range_detail::SinglePassIteratorConcept<std::istreambuf_iterator<char,std::char_traits<char>>>
]
test.cpp(10) : see reference to class template instantiation 'boost::concepts::require<Model>' being compiled
with
[
Model=boost::range_detail::SinglePassIteratorConcept<std::istreambuf_iterator<char,std::char_traits<char>>>
]
D:\libraries\boost\boost/range/concepts.hpp(160) : error C2440: 'initializing' : cannot convert from 'char' to 'char &'

因此,boost::copy 等 Boost.Range 算法不适用于 istreambuf_iterator

这是怎么回事?我可以做些什么来修复它或解决它?

编辑:错误的近因似乎是istreambuf_iteratorreference_typechar&,但它是 operator* 返回 char。对于格式良好的迭代器,operator* 不应该总是返回 reference_type 吗?

最佳答案

InputIteratoroperator* 类型的唯一要求是它可以转换为 value_type(§24.1.1/2 ).由于为 istreambuf_iteratoroperator* 结果赋值是没有意义的,因此返回引用或任何类型的左值都是不正确的。 Boost 在检查该属性时出错。

关于c++ - 为什么 std::istreambuf_iterator 无法 boost SinglePass Iterator 概念检查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7004129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com