1
boost::filesystem::directory_iterator
reference(v1.48)說directory_iterator
顯式定義了一個拷貝構造函數。我只是看着the code,它不會,大概讓編譯器定義copy-ctor。boost :: filesystem :: directory_iterator copy-ctor implictly deleted
在編譯器爲該類型生成移動對象的情況下會發生這種情況,隨後發現該隱式拷貝對象會不合格並因此刪除該拷貝對象?我還沒有用簡單而簡潔的代碼片段複製它,但似乎是在我的代碼中使用2011年12月17日的gcc 4.7快照進行的操作。儘管如此,我在gcc 4.6.1中沒有這個問題。
這裏是錯誤的,從GCC 4.7味道:
In file included from /usr/local/include/boost/iterator/interoperable.hpp:13:0,
from /usr/local/include/boost/iterator/iterator_facade.hpp:11,
from /usr/local/include/boost/filesystem/v3/path.hpp:28,
from /usr/local/include/boost/filesystem/path.hpp:31,
from /Users/matan/Development/ouch.git/src/include/ouch/operations.hh:4,
from /Users/matan/Development/ouch.git/src/libouch/operations.cc:1:
/usr/local/include/boost/type_traits/is_convertible.hpp: In instantiation of 'const bool boost::detail::is_convertible_basic_impl<boost::filesystem3::directory_iterator&, boost::filesystem3::directory_iterator>::value':
/usr/local/include/boost/type_traits/is_convertible.hpp:296:272: required from 'const bool boost::detail::is_convertible_impl<boost::filesystem3::directory_iterator, boost::filesystem3::directory_iterator>::value'
/usr/local/include/boost/type_traits/is_convertible.hpp:419:47: required from 'struct boost::is_convertible<boost::filesystem3::directory_iterator, boost::filesystem3::directory_iterator>'
/usr/local/include/boost/mpl/aux_/nested_type_wknd.hpp:26:31: required from 'struct boost::mpl::aux::nested_type_wknd<boost::is_convertible<boost::filesystem3::directory_iterator, boost::filesystem3::directory_iterator> >'
/usr/local/include/boost/mpl/aux_/preprocessed/gcc/or.hpp:48:8: required from 'struct boost::mpl::or_<boost::is_convertible<boost::filesystem3::directory_iterator, boost::filesystem3::directory_iterator>, boost::is_convertible<boost::filesystem3::directory_iterator, boost::filesystem3::directory_iterator>, mpl_::bool_<false>, mpl_::bool_<false>, mpl_::bool_<false> >'
/usr/local/include/boost/iterator/detail/enable_if.hpp:68:12: required from 'struct boost::iterators::enable_if<boost::mpl::or_<boost::is_convertible<boost::filesystem3::directory_iterator, boost::filesystem3::directory_iterator>, boost::is_convertible<boost::filesystem3::directory_iterator, boost::filesystem3::directory_iterator>, mpl_::bool_<false>, mpl_::bool_<false>, mpl_::bool_<false> >, bool>'
/usr/local/include/boost/iterator/iterator_facade.hpp:67:12: required from 'struct boost::detail::enable_if_interoperable<boost::filesystem3::directory_iterator, boost::filesystem3::directory_iterator, bool>'
/usr/local/include/boost/iterator/iterator_facade.hpp:837:323: required by substitution of 'template<class Derived1, class V1, class TC1, class Reference1, class Difference1, class Derived2, class V2, class TC2, class Reference2, class Difference2> typename boost::detail::enable_if_interoperable<Derived1, Derived2, typename boost::mpl::apply2<boost::detail::always_bool2, Derived1, Derived2>::type>::type boost::operator!=(const boost::iterator_facade<Derived1, V1, TC1, Reference1, Difference1>&, const boost::iterator_facade<Derived2, V2, TC2, Reference2, Difference2>&) [with Derived1 = boost::filesystem3::directory_iterator; V1 = boost::filesystem3::directory_entry; TC1 = boost::single_pass_traversal_tag; Reference1 = boost::filesystem3::directory_entry&; Difference1 = long int; Derived2 = boost::filesystem3::directory_iterator; V2 = boost::filesystem3::directory_entry; TC2 = boost::single_pass_traversal_tag; Reference2 = boost::filesystem3::directory_entry&; Difference2 = long int]'
/usr/local/include/boost/filesystem/v3/operations.hpp:691:49: required from here
/usr/local/include/boost/type_traits/is_convertible.hpp:137:49: error: use of deleted function 'boost::filesystem3::directory_iterator::directory_iterator(const boost::filesystem3::directory_iterator&)'
In file included from /usr/local/include/boost/filesystem/operations.hpp:31:0,
from /Users/matan/Development/ouch.git/src/libouch/operations.cc:4:
/usr/local/include/boost/filesystem/v3/operations.hpp:581:9: note: 'boost::filesystem3::directory_iterator::directory_iterator(const boost::filesystem3::directory_iterator&)' is implicitly deleted because the default definition would be ill-formed:
/usr/local/include/boost/filesystem/v3/operations.hpp:581:9: error: use of deleted function 'boost::shared_ptr<boost::filesystem3::detail::dir_itr_imp>::shared_ptr(const boost::shared_ptr<boost::filesystem3::detail::dir_itr_imp>&)'
你可以發佈一些你的代碼,使錯誤發生? –
我遇到了GCC 5.1和Clang 3.8的問題,可能是因爲我使用了過時的Boost 1.46.1 –