[ https://issues.apache.org/jira/browse/THRIFT-5816?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17879339#comment-17879339 ]
Carel commented on THRIFT-5816: ------------------------------- [~emmenlau] [~jensg] I tested with boost 1.86 and the changes fixes the issue > Fix UUID for boost 1.86.0 (change in {{data}} member usage) > ----------------------------------------------------------- > > Key: THRIFT-5816 > URL: https://issues.apache.org/jira/browse/THRIFT-5816 > Project: Thrift > Issue Type: Bug > Components: C++ - Library > Affects Versions: 0.20.0 > Reporter: Mario Emmenlauer > Assignee: Carel > Priority: Major > Time Spent: 20m > Remaining Estimate: 0h > > I have just updated boost to 1.86.0 (current latest), and thrift to current > latest master. Now the UUID support does not build for me. I can see that a > relevant change was in the PR for this issue, but I don't know for sure if > boost 1.86.0 is part of the breaking change. > The following code does not build for me: > {code} > TUuid(const boost::uuids::uuid& buuid) noexcept > { > std::copy(std::begin(buuid.data), std::end(buuid.data), > std::begin(this->data_)); > } > {code} > The error I get with clang 18 on Ubuntu 22.04 is: > {code} > [build] /data/tmp/Debug/thrift/lib/cpp/src/thrift/TUuid.h:93:15: error: no > matching function for call to 'begin' > [build] 93 | std::copy(std::begin(buuid.data), std::end(buuid.data), > std::begin(this->data_)); > [build] | ^~~~~~~~~~ > [build] > /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/initializer_list:90:5: > note: candidate template ignored: could not match 'initializer_list<_Tp>' > against 'data_type' > [build] 90 | begin(initializer_list<_Tp> __ils) noexcept > [build] | ^ > [build] > /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/range_access.h:52:5: > note: candidate template ignored: substitution failure [with _Container = > const data_type]: no member named 'begin' in 'boost::uuids::uuid::data_type' > [build] 52 | begin(_Container& __cont) -> decltype(__cont.begin()) > [build] | ^ ~~~~~ > [build] > /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/range_access.h:63:5: > note: candidate template ignored: substitution failure [with _Container = > data_type]: no member named 'begin' in 'boost::uuids::uuid::data_type' > [build] 63 | begin(const _Container& __cont) -> > decltype(__cont.begin()) > [build] | ^ ~~~~~ > [build] > /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/range_access.h:95:5: > note: candidate template ignored: could not match '_Tp[_Nm]' against 'const > data_type' > [build] 95 | begin(_Tp (&__arr)[_Nm]) noexcept > [build] | ^ > [build] > /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/range_access.h:113:31: > note: candidate template ignored: could not match 'valarray<_Tp>' against > 'const data_type' > [build] 113 | template<typename _Tp> _Tp* begin(valarray<_Tp>&) noexcept; > [build] | ^ > [build] > /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/range_access.h:114:37: > note: candidate template ignored: could not match 'const valarray<_Tp>' > against 'const data_type' > [build] 114 | template<typename _Tp> const _Tp* begin(const > valarray<_Tp>&) noexcept; > [build] | ^ > {code} > I think the reason is that according to > https://www.boost.org/doc/libs/1_86_0/libs/uuid/doc/html/uuid.html#changes_changes_in_boost_1_86_0_major_update, > the use of the data member is now discouraged, and does not work in all > cases any more. So it seems this broke with boost 1.86.0, but I'm not sure > how well earlier boost versions supported this. > I'm not really knowledgeable with boost::uuids. But according to a quick > search, the iterators are available directly on the uuid, instead of the data > member?! So the following compiles for me: > {code} > TUuid(const boost::uuids::uuid& buuid) noexcept > { > std::copy(std::begin(buuid), std::end(buuid), std::begin(this->data_)); > } > {code} > Highlight: Remove the {{.data}} from {{buuid}} in two places. > Opinions? -- This message was sent by Atlassian Jira (v8.20.10#820010)