[ https://issues.apache.org/jira/browse/THRIFT-5773?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17878870#comment-17878870 ]
Mario Emmenlauer commented on THRIFT-5773: ------------------------------------------ Sorry to be a bit late to the party. 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 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} 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. The error I get with clang 18 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'm not really knowledgeable with boost::uuids, but according to a quick search, the iterators are available directly on the uuid? 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} Opinions? > UUID wrapper for C++ > -------------------- > > Key: THRIFT-5773 > URL: https://issues.apache.org/jira/browse/THRIFT-5773 > Project: Thrift > Issue Type: New Feature > Components: C++ - Compiler > Reporter: Carel > Assignee: Carel > Priority: Major > Fix For: 0.21.0 > > Time Spent: 1h 10m > Remaining Estimate: 0h > > Continuation of THRIFT-5772 > Add a strong wrapper type for UUID support in C++ -- This message was sent by Atlassian Jira (v8.20.10#820010)