[
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)