Skip to content

Fix and optimize string conversions in the S3 VFS. #5545

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 8 commits into from
Jun 24, 2025
Merged

Conversation

teo-tsirpanis
Copy link
Member

Fixes #5352.


TYPE: BUG
DESC: Fixed compile errors in the S3 VFS.

@teo-tsirpanis
Copy link
Member Author

@hjaekel my latest commits should fix the problems reported in #5352 (comment). I tried building from source using an Alpine Docker container but gave up after some vcpkg-related errors. Could you validate?

@hjaekel
Copy link

hjaekel commented Jun 17, 2025

Unfortunately, I still get an error:

[190/413] Building CXX object tiledb/CMakeFiles/TILEDB_CORE_OBJECTS.dir/api/c_api/domain/domain_api.cc.o
ninja: job failed: /usr/bin/c++ -DAWS_AUTH_USE_IMPORT_EXPORT -DAWS_CAL_USE_IMPORT_EXPORT -DAWS_CHECKSUMS_USE_IMPORT_EXPORT -DAWS_COMMON_USE_IMPORT_EXPORT -DAWS_COMPRESSION_USE_IMPORT_EXPORT -DAWS_CRT_CPP_USE_IMPORT_EXPORT -DAWS_ENABLE_EPOLL -DAWS_EVENT_STREAM_USE_IMPORT_EXPORT -DAWS_HTTP_USE_IMPORT_EXPORT -DAWS_IO_USE_IMPORT_EXPORT -DAWS_MQTT_USE_IMPORT_EXPORT -DAWS_S3_USE_IMPORT_EXPORT -DAWS_SDKUTILS_USE_IMPORT_EXPORT -DAWS_SDK_VERSION_MAJOR=1 -DAWS_SDK_VERSION_MINOR=11 -DAWS_SDK_VERSION_PATCH=584 -DFMT_SHARED -DHAVE_GCS -DHAVE_S3 -DKJ_USE_FIBERS -DNDEBUG -DSPDLOG_COMPILED_LIB -DSPDLOG_FMT_EXTERNAL -DSPDLOG_SHARED_LIB -DTILEDB_SERIALIZATION -DTILEDB_STATS -DUSE_IMPORT_EXPORT=1 -D_FILE_OFFSET_BITS=64 -Dtiledb_EXPORTS -I/home/builder/package/community/tiledb/src/TileDB-main/tiledb/.. -I/home/builder/package/community/tiledb/src/TileDB-main/tiledb/../tiledb/sm/c_api -I/home/builder/package/community/tiledb/src/TileDB-main/tiledb/../external/include -I/home/builder/package/community/tiledb/src/TileDB-main/tiledb/../external/include/bitshuffle -I/home/builder/package/community/tiledb/src/TileDB-main/tiledb/../external/include/blosc -I/home/builder/package/community/tiledb/src/TileDB-main/external/blosc/include -I/home/builder/package/community/tiledb/src/TileDB-main/build/tiledb/.. -I/home/builder/package/community/tiledb/src/TileDB-main/tiledb/../tiledb/sm/cpp_api -I/home/builder/package/community/tiledb/src/TileDB-main/build/tiledb -Os -fstack-clash-protection -Wformat -Werror=format-security -D_GLIBCXX_ASSERTIONS=1 -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1 -D_LIBCPP_ENABLE_HARDENED_MODE=1 -Wno-deprecated-declarations -std=c++20 -fPIC -fvisibility=hidden -Wall -Wextra -MD -MT tiledb/CMakeFiles/TILEDB_CORE_OBJECTS.dir/api/c_api/vfs/vfs_api.cc.o -MF tiledb/CMakeFiles/TILEDB_CORE_OBJECTS.dir/api/c_api/vfs/vfs_api.cc.o.d -o tiledb/CMakeFiles/TILEDB_CORE_OBJECTS.dir/api/c_api/vfs/vfs_api.cc.o -c /home/builder/package/community/tiledb/src/TileDB-main/tiledb/api/c_api/vfs/vfs_api.cc
In file included from /home/builder/package/community/tiledb/src/TileDB-main/tiledb/../tiledb/sm/filesystem/vfs.h:68,
                 from /home/builder/package/community/tiledb/src/TileDB-main/tiledb/../tiledb/sm/storage_manager/context_resources.h:39,
                 from /home/builder/package/community/tiledb/src/TileDB-main/tiledb/../tiledb/sm/storage_manager/context.h:41,
                 from /home/builder/package/community/tiledb/src/TileDB-main/tiledb/../tiledb/api/c_api/context/context_api_internal.h:40,
                 from /home/builder/package/community/tiledb/src/TileDB-main/tiledb/../tiledb/api/c_api_support/exception_wrapper/exception_wrapper.h:40,
                 from /home/builder/package/community/tiledb/src/TileDB-main/tiledb/../tiledb/api/c_api_support/c_api_support.h:42,
                 from /home/builder/package/community/tiledb/src/TileDB-main/tiledb/api/c_api/vfs/vfs_api.cc:33:
/home/builder/package/community/tiledb/src/TileDB-main/tiledb/../tiledb/sm/filesystem/s3.h: In instantiation of 'void tiledb::sm::S3Scanner<F, D>::next(typename Iterator::pointer&) [with F = tiledb::sm::CallbackWrapperCAPI; D = std::function<bool(const std::basic_string_view<char>&)>; typename Iterator::pointer = std::vector<Aws::S3::Model::Object, Aws::Allocator<Aws::S3::Model::Object> >::const_iterator; Iterator = tiledb::sm::LsScanIterator<tiledb::sm::S3Scanner<tiledb::sm::CallbackWrapperCAPI, std::function<bool(const std::basic_string_view<char>&)> >, Aws::S3::Model::Object, Aws::Allocator<Aws::S3::Model::Object> >]':
/home/builder/package/community/tiledb/src/TileDB-main/tiledb/../tiledb/sm/filesystem/s3.h:1666:3:   required from 'tiledb::sm::S3Scanner<F, D>::S3Scanner(const std::shared_ptr<tiledb::sm::TileDBS3Client>&, const tiledb::sm::URI&, F, D, bool, int) [with F = tiledb::sm::CallbackWrapperCAPI; D = std::function<bool(const std::basic_string_view<char>&)>]'
 1666 |   next(begin_);
      |   ^~~~
/home/builder/package/community/tiledb/src/TileDB-main/tiledb/../tiledb/sm/filesystem/s3.h:917:21:   required from 'tiledb::sm::LsObjects tiledb::sm::S3::ls_filtered(const tiledb::sm::URI&, F, D, bool) const [with F = tiledb::sm::CallbackWrapperCAPI; D = std::function<bool(const std::basic_string_view<char>&)>; tiledb::sm::LsObjects = std::vector<std::pair<std::__cxx11::basic_string<char>, long unsigned int> >]'
  917 |     S3Scanner<F, D> s3_scanner(client_, parent, f, d, recursive);
      |                     ^~~~~~~~~~
/home/builder/package/community/tiledb/src/TileDB-main/tiledb/../tiledb/sm/filesystem/vfs.h:619:35:   required from 'tiledb::sm::LsObjects tiledb::sm::VFS::ls_filtered(const tiledb::sm::URI&, F, D, bool) const [with F = tiledb::sm::CallbackWrapperCAPI; D = std::function<bool(const std::basic_string_view<char>&)>; tiledb::sm::LsObjects = std::vector<std::pair<std::__cxx11::basic_string<char>, long unsigned int> >]'
  619 |         results = s3().ls_filtered(parent, f, d, recursive);
      |                   ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
/home/builder/package/community/tiledb/src/TileDB-main/tiledb/../tiledb/sm/filesystem/vfs.h:669:23:   required from 'tiledb::sm::LsObjects tiledb::sm::VFS::ls_recursive(const tiledb::sm::URI&, F, D) const [with F = tiledb::sm::CallbackWrapperCAPI; D = std::function<bool(const std::basic_string_view<char>&)>; tiledb::sm::LsObjects = std::vector<std::pair<std::__cxx11::basic_string<char>, long unsigned int> >]'
  669 |     return ls_filtered(parent, f, d, true);
      |            ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~
/home/builder/package/community/tiledb/src/TileDB-main/tiledb/api/c_api/vfs/vfs_api_internal.h:156:22:   required from here
  156 |     vfs_.ls_recursive(parent, wrapper);
      |     ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
/home/builder/package/community/tiledb/src/TileDB-main/tiledb/../tiledb/sm/filesystem/s3.h:1678:68: error: conversion from 'basic_string<[...],[...],Aws::Allocator<char>>' to non-scalar type 'basic_string<[...],[...],std::allocator<char>>' requested
 1678 |     std::string path = "s3://" + list_objects_request_.GetBucket() +
      |                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
 1679 |                        S3::add_front_slash(object.GetKey());
      |                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~         
ninja: subcommand failed

@teo-tsirpanis teo-tsirpanis marked this pull request as draft June 18, 2025 01:10
@teo-tsirpanis
Copy link
Member Author

To explain what happens, std::string uses std::allocator, and Aws::String uses Aws::Allocator. However, sometimes –including in our own builds– Aws::Allocator is an alias for std::allocator, and mismatches of string types in our own code do not cause errors. In Alpine builds, the allocator types are distinct, which causes the failures.

I built the AWS SDK with -DCUSTOM_MEMORY_MANAGEMENT=ON and managed to fix all errors on my environment (MSVC). @hjaekel could you validate again? If it fails, I would appreciate a Dockerfile that can reproduce the failures you observed.

@hjaekel
Copy link

hjaekel commented Jun 18, 2025

Just to motivate you: we are though the main library and are now compiling the unit tests. 😅

Alpine also uses -DCUSTOM_MEMORY_MANAGEMENT=ON for aws-sdk-cpp.

unit-s3.cc:451:76
[75/497] Building CXX object test/CMakeFiles/tiledb_unit.dir/src/unit-query-plan.cc.o
ninja: job failed: /usr/bin/c++ -DAWS_AUTH_USE_IMPORT_EXPORT -DAWS_CAL_USE_IMPORT_EXPORT -DAWS_CHECKSUMS_USE_IMPORT_EXPORT -DAWS_COMMON_USE_IMPORT_EXPORT -DAWS_COMPRESSION_USE_IMPORT_EXPORT -DAWS_CRT_CPP_USE_IMPORT_EXPORT -DAWS_ENABLE_EPOLL -DAWS_EVENT_STREAM_USE_IMPORT_EXPORT -DAWS_HTTP_USE_IMPORT_EXPORT -DAWS_IO_USE_IMPORT_EXPORT -DAWS_MQTT_USE_IMPORT_EXPORT -DAWS_S3_USE_IMPORT_EXPORT -DAWS_SDKUTILS_USE_IMPORT_EXPORT -DAWS_SDK_VERSION_MAJOR=1 -DAWS_SDK_VERSION_MINOR=11 -DAWS_SDK_VERSION_PATCH=584 -DFMT_SHARED -DHAVE_GCS -DHAVE_S3 -DKJ_USE_FIBERS -DNDEBUG -DSPDLOG_COMPILED_LIB -DSPDLOG_FMT_EXTERNAL -DSPDLOG_SHARED_LIB -DTILEDB_SERIALIZATION -DTILEDB_TEST_INPUTS_DIR=\"/home/builder/package/community/tiledb/src/TileDB-main/test/inputs\" -DUSE_IMPORT_EXPORT=1 -D_FILE_OFFSET_BITS=64 -Dtiledb_EXPORTS -I/home/builder/package/community/tiledb/src/TileDB-main/test/.. -I/home/builder/package/community/tiledb/src/TileDB-main/test/../tiledb/sm/c_api -I/home/builder/package/community/tiledb/src/TileDB-main/build/tiledb -I/home/builder/package/community/tiledb/src/TileDB-main/test/../external/include -Os -fstack-clash-protection -Wformat -Werror=format-security -D_GLIBCXX_ASSERTIONS=1 -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1 -D_LIBCPP_ENABLE_HARDENED_MODE=1 -std=c++20 -fvisibility=hidden -Wall -Wextra -Wno-deprecated-declarations -pthread -MD -MT test/CMakeFiles/tiledb_unit.dir/src/unit-s3.cc.o -MF test/CMakeFiles/tiledb_unit.dir/src/unit-s3.cc.o.d -o test/CMakeFiles/tiledb_unit.dir/src/unit-s3.cc.o -c /home/builder/package/community/tiledb/src/TileDB-main/test/src/unit-s3.cc
/home/builder/package/community/tiledb/src/TileDB-main/test/src/unit-s3.cc: In function 'void CATCH2_INTERNAL_TEST_8()':
/home/builder/package/community/tiledb/src/TileDB-main/test/src/unit-s3.cc:399:59: error: no match for 'operator+' (operand types are 'std::__cxx11::basic_string<char>' and 'const Aws::String' {aka 'const std::__cxx11::basic_string<char, std::char_traits<char>, Aws::Allocator<char> >'})
  399 |       auto full_uri = s3_test.temp_dir_.to_string() + "/" + s3_object.GetKey();
      |                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~
      |                                                     |                       |
      |                                                     |                       basic_string<[...],[...],Aws::Allocator<char>>
      |                                                     basic_string<[...],[...],std::allocator<char>>
In file included from /usr/include/c++/14.3.0/string:48,
                 from /usr/include/catch2/interfaces/catch_interfaces_capture.hpp:11,
                 from /usr/include/catch2/benchmark/catch_benchmark.hpp:19,
                 from /usr/include/catch2/benchmark/catch_benchmark_all.hpp:24,
                 from /usr/include/catch2/catch_all.hpp:25,
                 from /home/builder/package/community/tiledb/src/TileDB-main/test/../test/support/tdb_catch.h:56,
                 from /home/builder/package/community/tiledb/src/TileDB-main/test/src/unit-s3.cc:35:
/usr/include/c++/14.3.0/bits/stl_iterator.h:627:5: note: candidate: 'template<class _Iterator> constexpr std::reverse_iterator<_IteratorL> std::operator+(typename reverse_iterator<_IteratorL>::difference_type, const reverse_iterator<_IteratorL>&)'
  627 |     operator+(typename reverse_iterator<_Iterator>::difference_type __n,
      |     ^~~~~~~~
/usr/include/c++/14.3.0/bits/stl_iterator.h:627:5: note:   template argument deduction/substitution failed:
/home/builder/package/community/tiledb/src/TileDB-main/test/src/unit-s3.cc:399:78: note:   'const Aws::String' {aka 'const std::__cxx11::basic_string<char, std::char_traits<char>, Aws::Allocator<char> >'} is not derived from 'const std::reverse_iterator<_IteratorL>'
  399 |       auto full_uri = s3_test.temp_dir_.to_string() + "/" + s3_object.GetKey();
      |                                                                              ^
/usr/include/c++/14.3.0/bits/stl_iterator.h:1798:5: note: candidate: 'template<class _Iterator> constexpr std::move_iterator<_IteratorL> std::operator+(typename move_iterator<_IteratorL>::difference_type, const move_iterator<_IteratorL>&) requires requires{{std::operator+::__x->base() + std::operator+::__n} -> decltype(auto) [requires std::same_as<<placeholder>, _Iterator>];}'
 1798 |     operator+(typename move_iterator<_Iterator>::difference_type __n,
      |     ^~~~~~~~
/usr/include/c++/14.3.0/bits/stl_iterator.h:1798:5: note:   template argument deduction/substitution failed:
/home/builder/package/community/tiledb/src/TileDB-main/test/src/unit-s3.cc:399:78: note:   'const Aws::String' {aka 'const std::__cxx11::basic_string<char, std::char_traits<char>, Aws::Allocator<char> >'} is not derived from 'const std::move_iterator<_IteratorL>'
  399 |       auto full_uri = s3_test.temp_dir_.to_string() + "/" + s3_object.GetKey();
      |                                                                              ^
In file included from /usr/include/c++/14.3.0/string:54:
/usr/include/c++/14.3.0/bits/basic_string.h:3598:5: note: candidate: 'template<class _CharT, class _Traits, class _Alloc> constexpr std::__cxx11::basic_string<_CharT, _Traits, _Allocator> std::operator+(const __cxx11::basic_string<_CharT, _Traits, _Allocator>&, const __cxx11::basic_string<_CharT, _Traits, _Allocator>&)'
 3598 |     operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
      |     ^~~~~~~~
/usr/include/c++/14.3.0/bits/basic_string.h:3598:5: note:   template argument deduction/substitution failed:
/home/builder/package/community/tiledb/src/TileDB-main/test/src/unit-s3.cc:399:78: note:   deduced conflicting types for parameter '_Allocator' ('std::allocator<char>' and 'Aws::Allocator<char>')
  399 |       auto full_uri = s3_test.temp_dir_.to_string() + "/" + s3_object.GetKey();
      |                                                                              ^
/usr/include/c++/14.3.0/bits/basic_string.h:3616:5: note: candidate: 'template<class _CharT, class _Traits, class _Alloc> constexpr std::__cxx11::basic_string<_CharT, _Traits, _Allocator> std::operator+(const _CharT*, const __cxx11::basic_string<_CharT, _Traits, _Allocator>&)'
 3616 |     operator+(const _CharT* __lhs,
      |     ^~~~~~~~
/usr/include/c++/14.3.0/bits/basic_string.h:3616:5: note:   template argument deduction/substitution failed:
/home/builder/package/community/tiledb/src/TileDB-main/test/src/unit-s3.cc:399:78: note:   mismatched types 'const _CharT*' and 'std::__cxx11::basic_string<char>'
  399 |       auto full_uri = s3_test.temp_dir_.to_string() + "/" + s3_object.GetKey();
      |                                                                              ^
/usr/include/c++/14.3.0/bits/basic_string.h:3635:5: note: candidate: 'template<class _CharT, class _Traits, class _Alloc> constexpr std::__cxx11::basic_string<_CharT, _Traits, _Allocator> std::operator+(_CharT, const __cxx11::basic_string<_CharT, _Traits, _Allocator>&)'
 3635 |     operator+(_CharT __lhs, const basic_string<_CharT,_Traits,_Alloc>& __rhs)
      |     ^~~~~~~~
/usr/include/c++/14.3.0/bits/basic_string.h:3635:5: note:   template argument deduction/substitution failed:
/home/builder/package/community/tiledb/src/TileDB-main/test/src/unit-s3.cc:399:78: note:   deduced conflicting types for parameter '_CharT' ('std::__cxx11::basic_string<char>' and 'char')
  399 |       auto full_uri = s3_test.temp_dir_.to_string() + "/" + s3_object.GetKey();
      |                                                                              ^
/usr/include/c++/14.3.0/bits/basic_string.h:3652:5: note: candidate: 'template<class _CharT, class _Traits, class _Alloc> constexpr std::__cxx11::basic_string<_CharT, _Traits, _Allocator> std::operator+(const __cxx11::basic_string<_CharT, _Traits, _Allocator>&, const _CharT*)'
 3652 |     operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
      |     ^~~~~~~~
/usr/include/c++/14.3.0/bits/basic_string.h:3652:5: note:   template argument deduction/substitution failed:
/home/builder/package/community/tiledb/src/TileDB-main/test/src/unit-s3.cc:399:78: note:   mismatched types 'const _CharT*' and 'std::__cxx11::basic_string<char, std::char_traits<char>, Aws::Allocator<char> >'
  399 |       auto full_uri = s3_test.temp_dir_.to_string() + "/" + s3_object.GetKey();
      |                                                                              ^
/usr/include/c++/14.3.0/bits/basic_string.h:3670:5: note: candidate: 'template<class _CharT, class _Traits, class _Alloc> constexpr std::__cxx11::basic_string<_CharT, _Traits, _Allocator> std::operator+(const __cxx11::basic_string<_CharT, _Traits, _Allocator>&, _CharT)'
 3670 |     operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs, _CharT __rhs)
      |     ^~~~~~~~
/usr/include/c++/14.3.0/bits/basic_string.h:3670:5: note:   template argument deduction/substitution failed:
/home/builder/package/community/tiledb/src/TileDB-main/test/src/unit-s3.cc:399:78: note:   deduced conflicting types for parameter '_CharT' ('char' and 'std::__cxx11::basic_string<char, std::char_traits<char>, Aws::Allocator<char> >')
  399 |       auto full_uri = s3_test.temp_dir_.to_string() + "/" + s3_object.GetKey();
      |                                                                              ^
/usr/include/c++/14.3.0/bits/basic_string.h:3682:5: note: candidate: 'template<class _CharT, class _Traits, class _Alloc> constexpr std::__cxx11::basic_string<_CharT, _Traits, _Allocator> std::operator+(__cxx11::basic_string<_CharT, _Traits, _Allocator>&&, const __cxx11::basic_string<_CharT, _Traits, _Allocator>&)'
 3682 |     operator+(basic_string<_CharT, _Traits, _Alloc>&& __lhs,
      |     ^~~~~~~~
/usr/include/c++/14.3.0/bits/basic_string.h:3682:5: note:   template argument deduction/substitution failed:
/home/builder/package/community/tiledb/src/TileDB-main/test/src/unit-s3.cc:399:78: note:   deduced conflicting types for parameter '_Allocator' ('std::allocator<char>' and 'Aws::Allocator<char>')
  399 |       auto full_uri = s3_test.temp_dir_.to_string() + "/" + s3_object.GetKey();
      |                                                                              ^
/usr/include/c++/14.3.0/bits/basic_string.h:3689:5: note: candidate: 'template<class _CharT, class _Traits, class _Alloc> constexpr std::__cxx11::basic_string<_CharT, _Traits, _Allocator> std::operator+(const __cxx11::basic_string<_CharT, _Traits, _Allocator>&, __cxx11::basic_string<_CharT, _Traits, _Allocator>&&)'
 3689 |     operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
      |     ^~~~~~~~
/usr/include/c++/14.3.0/bits/basic_string.h:3689:5: note:   template argument deduction/substitution failed:
/home/builder/package/community/tiledb/src/TileDB-main/test/src/unit-s3.cc:399:78: note:   types 'std::__cxx11::basic_string<_CharT, _Traits, _Allocator>' and 'const Aws::String' {aka 'const std::__cxx11::basic_string<char, std::char_traits<char>, Aws::Allocator<char> >'} have incompatible cv-qualifiers
  399 |       auto full_uri = s3_test.temp_dir_.to_string() + "/" + s3_object.GetKey();
      |                                                                              ^
/usr/include/c++/14.3.0/bits/basic_string.h:3696:5: note: candidate: 'template<class _CharT, class _Traits, class _Alloc> constexpr std::__cxx11::basic_string<_CharT, _Traits, _Allocator> std::operator+(__cxx11::basic_string<_CharT, _Traits, _Allocator>&&, __cxx11::basic_string<_CharT, _Traits, _Allocator>&&)'
 3696 |     operator+(basic_string<_CharT, _Traits, _Alloc>&& __lhs,
      |     ^~~~~~~~
/usr/include/c++/14.3.0/bits/basic_string.h:3696:5: note:   template argument deduction/substitution failed:
/home/builder/package/community/tiledb/src/TileDB-main/test/src/unit-s3.cc:399:78: note:   types 'std::__cxx11::basic_string<_CharT, _Traits, _Allocator>' and 'const Aws::String' {aka 'const std::__cxx11::basic_string<char, std::char_traits<char>, Aws::Allocator<char> >'} have incompatible cv-qualifiers
  399 |       auto full_uri = s3_test.temp_dir_.to_string() + "/" + s3_object.GetKey();
      |                                                                              ^
/usr/include/c++/14.3.0/bits/basic_string.h:3719:5: note: candidate: 'template<class _CharT, class _Traits, class _Alloc> constexpr std::__cxx11::basic_string<_CharT, _Traits, _Allocator> std::operator+(const _CharT*, __cxx11::basic_string<_CharT, _Traits, _Allocator>&&)'
 3719 |     operator+(const _CharT* __lhs,
      |     ^~~~~~~~
/usr/include/c++/14.3.0/bits/basic_string.h:3719:5: note:   template argument deduction/substitution failed:
/home/builder/package/community/tiledb/src/TileDB-main/test/src/unit-s3.cc:399:78: note:   mismatched types 'const _CharT*' and 'std::__cxx11::basic_string<char>'
  399 |       auto full_uri = s3_test.temp_dir_.to_string() + "/" + s3_object.GetKey();
      |                                                                              ^
/usr/include/c++/14.3.0/bits/basic_string.h:3726:5: note: candidate: 'template<class _CharT, class _Traits, class _Alloc> constexpr std::__cxx11::basic_string<_CharT, _Traits, _Allocator> std::operator+(_CharT, __cxx11::basic_string<_CharT, _Traits, _Allocator>&&)'
 3726 |     operator+(_CharT __lhs,
      |     ^~~~~~~~
/usr/include/c++/14.3.0/bits/basic_string.h:3726:5: note:   template argument deduction/substitution failed:
/home/builder/package/community/tiledb/src/TileDB-main/test/src/unit-s3.cc:399:78: note:   types 'std::__cxx11::basic_string<_CharT, _Traits, _Allocator>' and 'const Aws::String' {aka 'const std::__cxx11::basic_string<char, std::char_traits<char>, Aws::Allocator<char> >'} have incompatible cv-qualifiers
  399 |       auto full_uri = s3_test.temp_dir_.to_string() + "/" + s3_object.GetKey();
      |                                                                              ^
/usr/include/c++/14.3.0/bits/basic_string.h:3733:5: note: candidate: 'template<class _CharT, class _Traits, class _Alloc> constexpr std::__cxx11::basic_string<_CharT, _Traits, _Allocator> std::operator+(__cxx11::basic_string<_CharT, _Traits, _Allocator>&&, const _CharT*)'
 3733 |     operator+(basic_string<_CharT, _Traits, _Alloc>&& __lhs,
      |     ^~~~~~~~
/usr/include/c++/14.3.0/bits/basic_string.h:3733:5: note:   template argument deduction/substitution failed:
/home/builder/package/community/tiledb/src/TileDB-main/test/src/unit-s3.cc:399:78: note:   mismatched types 'const _CharT*' and 'std::__cxx11::basic_string<char, std::char_traits<char>, Aws::Allocator<char> >'
  399 |       auto full_uri = s3_test.temp_dir_.to_string() + "/" + s3_object.GetKey();
      |                                                                              ^
/usr/include/c++/14.3.0/bits/basic_string.h:3740:5: note: candidate: 'template<class _CharT, class _Traits, class _Alloc> constexpr std::__cxx11::basic_string<_CharT, _Traits, _Allocator> std::operator+(__cxx11::basic_string<_CharT, _Traits, _Allocator>&&, _CharT)'
 3740 |     operator+(basic_string<_CharT, _Traits, _Alloc>&& __lhs,
      |     ^~~~~~~~
/usr/include/c++/14.3.0/bits/basic_string.h:3740:5: note:   template argument deduction/substitution failed:
/home/builder/package/community/tiledb/src/TileDB-main/test/src/unit-s3.cc:399:78: note:   deduced conflicting types for parameter '_CharT' ('char' and 'std::__cxx11::basic_string<char, std::char_traits<char>, Aws::Allocator<char> >')
  399 |       auto full_uri = s3_test.temp_dir_.to_string() + "/" + s3_object.GetKey();
      |                                                                              ^
In file included from /usr/include/c++/14.3.0/valarray:605,
                 from /home/builder/package/community/tiledb/src/TileDB-main/test/../external/include/nlohmann/json.hpp:79,
                 from /home/builder/package/community/tiledb/src/TileDB-main/test/../tiledb/common/memory_tracker.h:103,
                 from /home/builder/package/community/tiledb/src/TileDB-main/test/../test/support/src/mem_helpers.h:37,
                 from /home/builder/package/community/tiledb/src/TileDB-main/test/../test/support/src/helpers.h:37,
                 from /home/builder/package/community/tiledb/src/TileDB-main/test/src/unit-s3.cc:36:
/usr/include/c++/14.3.0/bits/valarray_after.h:405:5: note: candidate: 'template<class _Dom1, class _Dom2> std::_Expr<std::__detail::_BinClos<std::__plus, std::_Expr, std::_Expr, _Dom1, _Dom2>, typename std::__fun<std::__plus, typename _Dom1::value_type>::result_type> std::operator+(const _Expr<_Dom1, typename _Dom1::value_type>&, const _Expr<_Dom2, typename _Dom2::value_type>&)'
  405 |     _DEFINE_EXPR_BINARY_OPERATOR(+, struct std::__plus)
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14.3.0/bits/valarray_after.h:405:5: note:   template argument deduction/substitution failed:
/home/builder/package/community/tiledb/src/TileDB-main/test/src/unit-s3.cc:399:78: note:   'std::__cxx11::basic_string<char>' is not derived from 'const std::_Expr<_Dom1, typename _Dom1::value_type>'
  399 |       auto full_uri = s3_test.temp_dir_.to_string() + "/" + s3_object.GetKey();
      |                                                                              ^
/usr/include/c++/14.3.0/bits/valarray_after.h:405:5: note: candidate: 'template<class _Dom> std::_Expr<std::__detail::_BinClos<std::__plus, std::_Expr, std::_Constant, _Dom, typename _Dom::value_type>, typename std::__fun<std::__plus, typename _Dom1::value_type>::result_type> std::operator+(const _Expr<_Dom1, typename _Dom1::value_type>&, const typename _Dom::value_type&)'
  405 |     _DEFINE_EXPR_BINARY_OPERATOR(+, struct std::__plus)
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14.3.0/bits/valarray_after.h:405:5: note:   template argument deduction/substitution failed:
/home/builder/package/community/tiledb/src/TileDB-main/test/src/unit-s3.cc:399:78: note:   'std::__cxx11::basic_string<char>' is not derived from 'const std::_Expr<_Dom1, typename _Dom1::value_type>'
  399 |       auto full_uri = s3_test.temp_dir_.to_string() + "/" + s3_object.GetKey();
      |                                                                              ^
/usr/include/c++/14.3.0/bits/valarray_after.h:405:5: note: candidate: 'template<class _Dom> std::_Expr<std::__detail::_BinClos<std::__plus, std::_Constant, std::_Expr, typename _Dom::value_type, _Dom>, typename std::__fun<std::__plus, typename _Dom1::value_type>::result_type> std::operator+(const typename _Dom::value_type&, const _Expr<_Dom1, typename _Dom1::value_type>&)'
  405 |     _DEFINE_EXPR_BINARY_OPERATOR(+, struct std::__plus)
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14.3.0/bits/valarray_after.h:405:5: note:   template argument deduction/substitution failed:
/home/builder/package/community/tiledb/src/TileDB-main/test/src/unit-s3.cc:399:78: note:   'const Aws::String' {aka 'const std::__cxx11::basic_string<char, std::char_traits<char>, Aws::Allocator<char> >'} is not derived from 'const std::_Expr<_Dom1, typename _Dom1::value_type>'
  399 |       auto full_uri = s3_test.temp_dir_.to_string() + "/" + s3_object.GetKey();
      |                                                                              ^
/usr/include/c++/14.3.0/bits/valarray_after.h:405:5: note: candidate: 'template<class _Dom> std::_Expr<std::__detail::_BinClos<std::__plus, std::_Expr, std::_ValArray, _Dom, typename _Dom::value_type>, typename std::__fun<std::__plus, typename _Dom1::value_type>::result_type> std::operator+(const _Expr<_Dom1, typename _Dom1::value_type>&, const valarray<typename _Dom::value_type>&)'
  405 |     _DEFINE_EXPR_BINARY_OPERATOR(+, struct std::__plus)
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14.3.0/bits/valarray_after.h:405:5: note:   template argument deduction/substitution failed:
/home/builder/package/community/tiledb/src/TileDB-main/test/src/unit-s3.cc:399:78: note:   'std::__cxx11::basic_string<char>' is not derived from 'const std::_Expr<_Dom1, typename _Dom1::value_type>'
  399 |       auto full_uri = s3_test.temp_dir_.to_string() + "/" + s3_object.GetKey();
      |                                                                              ^
/usr/include/c++/14.3.0/bits/valarray_after.h:405:5: note: candidate: 'template<class _Dom> std::_Expr<std::__detail::_BinClos<std::__plus, std::_ValArray, std::_Expr, typename _Dom::value_type, _Dom>, typename std::__fun<std::__plus, typename _Dom1::value_type>::result_type> std::operator+(const valarray<typename _Dom::value_type>&, const _Expr<_Dom1, typename _Dom1::value_type>&)'
  405 |     _DEFINE_EXPR_BINARY_OPERATOR(+, struct std::__plus)
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14.3.0/bits/valarray_after.h:405:5: note:   template argument deduction/substitution failed:
/home/builder/package/community/tiledb/src/TileDB-main/test/src/unit-s3.cc:399:78: note:   'const Aws::String' {aka 'const std::__cxx11::basic_string<char, std::char_traits<char>, Aws::Allocator<char> >'} is not derived from 'const std::_Expr<_Dom1, typename _Dom1::value_type>'
  399 |       auto full_uri = s3_test.temp_dir_.to_string() + "/" + s3_object.GetKey();
      |                                                                              ^
/usr/include/c++/14.3.0/valarray:1196:1: note: candidate: 'template<class _Tp> std::_Expr<std::__detail::_BinClos<std::__plus, std::_ValArray, std::_ValArray, _Tp, _Tp>, typename std::__fun<std::__plus, _Tp>::result_type> std::operator+(const valarray<_Tp>&, const valarray<_Tp>&)'
 1196 | _DEFINE_BINARY_OPERATOR(+, __plus)
      | ^~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14.3.0/valarray:1196:1: note:   template argument deduction/substitution failed:
/home/builder/package/community/tiledb/src/TileDB-main/test/src/unit-s3.cc:399:78: note:   'std::__cxx11::basic_string<char>' is not derived from 'const std::valarray<_Tp>'
  399 |       auto full_uri = s3_test.temp_dir_.to_string() + "/" + s3_object.GetKey();
      |                                                                              ^
/usr/include/c++/14.3.0/valarray:1196:1: note: candidate: 'template<class _Tp> std::_Expr<std::__detail::_BinClos<std::__plus, std::_ValArray, std::_Constant, _Tp, _Tp>, typename std::__fun<std::__plus, _Tp>::result_type> std::operator+(const valarray<_Tp>&, const typename valarray<_Tp>::value_type&)'
 1196 | _DEFINE_BINARY_OPERATOR(+, __plus)
      | ^~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14.3.0/valarray:1196:1: note:   template argument deduction/substitution failed:
/home/builder/package/community/tiledb/src/TileDB-main/test/src/unit-s3.cc:399:78: note:   'std::__cxx11::basic_string<char>' is not derived from 'const std::valarray<_Tp>'
  399 |       auto full_uri = s3_test.temp_dir_.to_string() + "/" + s3_object.GetKey();
      |                                                                              ^
/usr/include/c++/14.3.0/valarray:1196:1: note: candidate: 'template<class _Tp> std::_Expr<std::__detail::_BinClos<std::__plus, std::_Constant, std::_ValArray, _Tp, _Tp>, typename std::__fun<std::__plus, _Tp>::result_type> std::operator+(const typename valarray<_Tp>::value_type&, const valarray<_Tp>&)'
 1196 | _DEFINE_BINARY_OPERATOR(+, __plus)
      | ^~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14.3.0/valarray:1196:1: note:   template argument deduction/substitution failed:
/home/builder/package/community/tiledb/src/TileDB-main/test/src/unit-s3.cc:399:78: note:   'const Aws::String' {aka 'const std::__cxx11::basic_string<char, std::char_traits<char>, Aws::Allocator<char> >'} is not derived from 'const std::valarray<_Tp>'
  399 |       auto full_uri = s3_test.temp_dir_.to_string() + "/" + s3_object.GetKey();
      |                                                                              ^
/home/builder/package/community/tiledb/src/TileDB-main/test/src/unit-s3.cc: In function 'void CATCH2_INTERNAL_TEST_16()':
/home/builder/package/community/tiledb/src/TileDB-main/test/src/unit-s3.cc:451:57: error: no match for 'operator+' (operand types are 'std::__cxx11::basic_string<char>' and 'const Aws::String' {aka 'const std::__cxx11::basic_string<char, std::char_traits<char>, Aws::Allocator<char> >'})
  451 |     auto full_uri = s3_test.temp_dir_.to_string() + "/" + s3_object.GetKey();
      |                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~
      |                                                   |                       |
      |                                                   |                       basic_string<[...],[...],Aws::Allocator<char>>
      |                                                   basic_string<[...],[...],std::allocator<char>>
/usr/include/c++/14.3.0/bits/stl_iterator.h:627:5: note: candidate: 'template<class _Iterator> constexpr std::reverse_iterator<_IteratorL> std::operator+(typename reverse_iterator<_IteratorL>::difference_type, const reverse_iterator<_IteratorL>&)'
  627 |     operator+(typename reverse_iterator<_Iterator>::difference_type __n,
      |     ^~~~~~~~
/usr/include/c++/14.3.0/bits/stl_iterator.h:627:5: note:   template argument deduction/substitution failed:
/home/builder/package/community/tiledb/src/TileDB-main/test/src/unit-s3.cc:451:76: note:   'const Aws::String' {aka 'const std::__cxx11::basic_string<char, std::char_traits<char>, Aws::Allocator<char> >'} is not derived from 'const std::reverse_iterator<_IteratorL>'
  451 |     auto full_uri = s3_test.temp_dir_.to_string() + "/" + s3_object.GetKey();
      |                                                                            ^
/usr/include/c++/14.3.0/bits/stl_iterator.h:1798:5: note: candidate: 'template<class _Iterator> constexpr std::move_iterator<_IteratorL> std::operator+(typename move_iterator<_IteratorL>::difference_type, const move_iterator<_IteratorL>&) requires requires{{std::operator+::__x->base() + std::operator+::__n} -> decltype(auto) [requires std::same_as<<placeholder>, _Iterator>];}'
 1798 |     operator+(typename move_iterator<_Iterator>::difference_type __n,
      |     ^~~~~~~~
/usr/include/c++/14.3.0/bits/stl_iterator.h:1798:5: note:   template argument deduction/substitution failed:
/home/builder/package/community/tiledb/src/TileDB-main/test/src/unit-s3.cc:451:76: note:   'const Aws::String' {aka 'const std::__cxx11::basic_string<char, std::char_traits<char>, Aws::Allocator<char> >'} is not derived from 'const std::move_iterator<_IteratorL>'
  451 |     auto full_uri = s3_test.temp_dir_.to_string() + "/" + s3_object.GetKey();
      |                                                                            ^
/usr/include/c++/14.3.0/bits/basic_string.h:3598:5: note: candidate: 'template<class _CharT, class _Traits, class _Alloc> constexpr std::__cxx11::basic_string<_CharT, _Traits, _Allocator> std::operator+(const __cxx11::basic_string<_CharT, _Traits, _Allocator>&, const __cxx11::basic_string<_CharT, _Traits, _Allocator>&)'
 3598 |     operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
      |     ^~~~~~~~
/usr/include/c++/14.3.0/bits/basic_string.h:3598:5: note:   template argument deduction/substitution failed:
/home/builder/package/community/tiledb/src/TileDB-main/test/src/unit-s3.cc:451:76: note:   deduced conflicting types for parameter '_Allocator' ('std::allocator<char>' and 'Aws::Allocator<char>')
  451 |     auto full_uri = s3_test.temp_dir_.to_string() + "/" + s3_object.GetKey();
      |                                                                            ^
/usr/include/c++/14.3.0/bits/basic_string.h:3616:5: note: candidate: 'template<class _CharT, class _Traits, class _Alloc> constexpr std::__cxx11::basic_string<_CharT, _Traits, _Allocator> std::operator+(const _CharT*, const __cxx11::basic_string<_CharT, _Traits, _Allocator>&)'
 3616 |     operator+(const _CharT* __lhs,
      |     ^~~~~~~~
/usr/include/c++/14.3.0/bits/basic_string.h:3616:5: note:   template argument deduction/substitution failed:
/home/builder/package/community/tiledb/src/TileDB-main/test/src/unit-s3.cc:451:76: note:   mismatched types 'const _CharT*' and 'std::__cxx11::basic_string<char>'
  451 |     auto full_uri = s3_test.temp_dir_.to_string() + "/" + s3_object.GetKey();
      |                                                                            ^
/usr/include/c++/14.3.0/bits/basic_string.h:3635:5: note: candidate: 'template<class _CharT, class _Traits, class _Alloc> constexpr std::__cxx11::basic_string<_CharT, _Traits, _Allocator> std::operator+(_CharT, const __cxx11::basic_string<_CharT, _Traits, _Allocator>&)'
 3635 |     operator+(_CharT __lhs, const basic_string<_CharT,_Traits,_Alloc>& __rhs)
      |     ^~~~~~~~
/usr/include/c++/14.3.0/bits/basic_string.h:3635:5: note:   template argument deduction/substitution failed:
/home/builder/package/community/tiledb/src/TileDB-main/test/src/unit-s3.cc:451:76: note:   deduced conflicting types for parameter '_CharT' ('std::__cxx11::basic_string<char>' and 'char')
  451 |     auto full_uri = s3_test.temp_dir_.to_string() + "/" + s3_object.GetKey();
      |                                                                            ^
/usr/include/c++/14.3.0/bits/basic_string.h:3652:5: note: candidate: 'template<class _CharT, class _Traits, class _Alloc> constexpr std::__cxx11::basic_string<_CharT, _Traits, _Allocator> std::operator+(const __cxx11::basic_string<_CharT, _Traits, _Allocator>&, const _CharT*)'
 3652 |     operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
      |     ^~~~~~~~
/usr/include/c++/14.3.0/bits/basic_string.h:3652:5: note:   template argument deduction/substitution failed:
/home/builder/package/community/tiledb/src/TileDB-main/test/src/unit-s3.cc:451:76: note:   mismatched types 'const _CharT*' and 'std::__cxx11::basic_string<char, std::char_traits<char>, Aws::Allocator<char> >'
  451 |     auto full_uri = s3_test.temp_dir_.to_string() + "/" + s3_object.GetKey();
      |                                                                            ^
/usr/include/c++/14.3.0/bits/basic_string.h:3670:5: note: candidate: 'template<class _CharT, class _Traits, class _Alloc> constexpr std::__cxx11::basic_string<_CharT, _Traits, _Allocator> std::operator+(const __cxx11::basic_string<_CharT, _Traits, _Allocator>&, _CharT)'
 3670 |     operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs, _CharT __rhs)
      |     ^~~~~~~~
/usr/include/c++/14.3.0/bits/basic_string.h:3670:5: note:   template argument deduction/substitution failed:
/home/builder/package/community/tiledb/src/TileDB-main/test/src/unit-s3.cc:451:76: note:   deduced conflicting types for parameter '_CharT' ('char' and 'std::__cxx11::basic_string<char, std::char_traits<char>, Aws::Allocator<char> >')
  451 |     auto full_uri = s3_test.temp_dir_.to_string() + "/" + s3_object.GetKey();
      |                                                                            ^
/usr/include/c++/14.3.0/bits/basic_string.h:3682:5: note: candidate: 'template<class _CharT, class _Traits, class _Alloc> constexpr std::__cxx11::basic_string<_CharT, _Traits, _Allocator> std::operator+(__cxx11::basic_string<_CharT, _Traits, _Allocator>&&, const __cxx11::basic_string<_CharT, _Traits, _Allocator>&)'
 3682 |     operator+(basic_string<_CharT, _Traits, _Alloc>&& __lhs,
      |     ^~~~~~~~
/usr/include/c++/14.3.0/bits/basic_string.h:3682:5: note:   template argument deduction/substitution failed:
/home/builder/package/community/tiledb/src/TileDB-main/test/src/unit-s3.cc:451:76: note:   deduced conflicting types for parameter '_Allocator' ('std::allocator<char>' and 'Aws::Allocator<char>')
  451 |     auto full_uri = s3_test.temp_dir_.to_string() + "/" + s3_object.GetKey();
      |                                                                            ^
/usr/include/c++/14.3.0/bits/basic_string.h:3689:5: note: candidate: 'template<class _CharT, class _Traits, class _Alloc> constexpr std::__cxx11::basic_string<_CharT, _Traits, _Allocator> std::operator+(const __cxx11::basic_string<_CharT, _Traits, _Allocator>&, __cxx11::basic_string<_CharT, _Traits, _Allocator>&&)'
 3689 |     operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
      |     ^~~~~~~~
/usr/include/c++/14.3.0/bits/basic_string.h:3689:5: note:   template argument deduction/substitution failed:
/home/builder/package/community/tiledb/src/TileDB-main/test/src/unit-s3.cc:451:76: note:   types 'std::__cxx11::basic_string<_CharT, _Traits, _Allocator>' and 'const Aws::String' {aka 'const std::__cxx11::basic_string<char, std::char_traits<char>, Aws::Allocator<char> >'} have incompatible cv-qualifiers
  451 |     auto full_uri = s3_test.temp_dir_.to_string() + "/" + s3_object.GetKey();
      |                                                                            ^
/usr/include/c++/14.3.0/bits/basic_string.h:3696:5: note: candidate: 'template<class _CharT, class _Traits, class _Alloc> constexpr std::__cxx11::basic_string<_CharT, _Traits, _Allocator> std::operator+(__cxx11::basic_string<_CharT, _Traits, _Allocator>&&, __cxx11::basic_string<_CharT, _Traits, _Allocator>&&)'
 3696 |     operator+(basic_string<_CharT, _Traits, _Alloc>&& __lhs,
      |     ^~~~~~~~
/usr/include/c++/14.3.0/bits/basic_string.h:3696:5: note:   template argument deduction/substitution failed:
/home/builder/package/community/tiledb/src/TileDB-main/test/src/unit-s3.cc:451:76: note:   types 'std::__cxx11::basic_string<_CharT, _Traits, _Allocator>' and 'const Aws::String' {aka 'const std::__cxx11::basic_string<char, std::char_traits<char>, Aws::Allocator<char> >'} have incompatible cv-qualifiers
  451 |     auto full_uri = s3_test.temp_dir_.to_string() + "/" + s3_object.GetKey();
      |                                                                            ^
/usr/include/c++/14.3.0/bits/basic_string.h:3719:5: note: candidate: 'template<class _CharT, class _Traits, class _Alloc> constexpr std::__cxx11::basic_string<_CharT, _Traits, _Allocator> std::operator+(const _CharT*, __cxx11::basic_string<_CharT, _Traits, _Allocator>&&)'
 3719 |     operator+(const _CharT* __lhs,
      |     ^~~~~~~~
/usr/include/c++/14.3.0/bits/basic_string.h:3719:5: note:   template argument deduction/substitution failed:
/home/builder/package/community/tiledb/src/TileDB-main/test/src/unit-s3.cc:451:76: note:   mismatched types 'const _CharT*' and 'std::__cxx11::basic_string<char>'
  451 |     auto full_uri = s3_test.temp_dir_.to_string() + "/" + s3_object.GetKey();
      |                                                                            ^
/usr/include/c++/14.3.0/bits/basic_string.h:3726:5: note: candidate: 'template<class _CharT, class _Traits, class _Alloc> constexpr std::__cxx11::basic_string<_CharT, _Traits, _Allocator> std::operator+(_CharT, __cxx11::basic_string<_CharT, _Traits, _Allocator>&&)'
 3726 |     operator+(_CharT __lhs,
      |     ^~~~~~~~
/usr/include/c++/14.3.0/bits/basic_string.h:3726:5: note:   template argument deduction/substitution failed:
/home/builder/package/community/tiledb/src/TileDB-main/test/src/unit-s3.cc:451:76: note:   types 'std::__cxx11::basic_string<_CharT, _Traits, _Allocator>' and 'const Aws::String' {aka 'const std::__cxx11::basic_string<char, std::char_traits<char>, Aws::Allocator<char> >'} have incompatible cv-qualifiers
  451 |     auto full_uri = s3_test.temp_dir_.to_string() + "/" + s3_object.GetKey();
      |                                                                            ^
/usr/include/c++/14.3.0/bits/basic_string.h:3733:5: note: candidate: 'template<class _CharT, class _Traits, class _Alloc> constexpr std::__cxx11::basic_string<_CharT, _Traits, _Allocator> std::operator+(__cxx11::basic_string<_CharT, _Traits, _Allocator>&&, const _CharT*)'
 3733 |     operator+(basic_string<_CharT, _Traits, _Alloc>&& __lhs,
      |     ^~~~~~~~
/usr/include/c++/14.3.0/bits/basic_string.h:3733:5: note:   template argument deduction/substitution failed:
/home/builder/package/community/tiledb/src/TileDB-main/test/src/unit-s3.cc:451:76: note:   mismatched types 'const _CharT*' and 'std::__cxx11::basic_string<char, std::char_traits<char>, Aws::Allocator<char> >'
  451 |     auto full_uri = s3_test.temp_dir_.to_string() + "/" + s3_object.GetKey();
      |                                                                            ^
/usr/include/c++/14.3.0/bits/basic_string.h:3740:5: note: candidate: 'template<class _CharT, class _Traits, class _Alloc> constexpr std::__cxx11::basic_string<_CharT, _Traits, _Allocator> std::operator+(__cxx11::basic_string<_CharT, _Traits, _Allocator>&&, _CharT)'
 3740 |     operator+(basic_string<_CharT, _Traits, _Alloc>&& __lhs,
      |     ^~~~~~~~
/usr/include/c++/14.3.0/bits/basic_string.h:3740:5: note:   template argument deduction/substitution failed:
/home/builder/package/community/tiledb/src/TileDB-main/test/src/unit-s3.cc:451:76: note:   deduced conflicting types for parameter '_CharT' ('char' and 'std::__cxx11::basic_string<char, std::char_traits<char>, Aws::Allocator<char> >')
  451 |     auto full_uri = s3_test.temp_dir_.to_string() + "/" + s3_object.GetKey();
      |                                                                            ^
/usr/include/c++/14.3.0/bits/valarray_after.h:405:5: note: candidate: 'template<class _Dom1, class _Dom2> std::_Expr<std::__detail::_BinClos<std::__plus, std::_Expr, std::_Expr, _Dom1, _Dom2>, typename std::__fun<std::__plus, typename _Dom1::value_type>::result_type> std::operator+(const _Expr<_Dom1, typename _Dom1::value_type>&, const _Expr<_Dom2, typename _Dom2::value_type>&)'
  405 |     _DEFINE_EXPR_BINARY_OPERATOR(+, struct std::__plus)
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14.3.0/bits/valarray_after.h:405:5: note:   template argument deduction/substitution failed:
/home/builder/package/community/tiledb/src/TileDB-main/test/src/unit-s3.cc:451:76: note:   'std::__cxx11::basic_string<char>' is not derived from 'const std::_Expr<_Dom1, typename _Dom1::value_type>'
  451 |     auto full_uri = s3_test.temp_dir_.to_string() + "/" + s3_object.GetKey();
      |                                                                            ^
/usr/include/c++/14.3.0/bits/valarray_after.h:405:5: note: candidate: 'template<class _Dom> std::_Expr<std::__detail::_BinClos<std::__plus, std::_Expr, std::_Constant, _Dom, typename _Dom::value_type>, typename std::__fun<std::__plus, typename _Dom1::value_type>::result_type> std::operator+(const _Expr<_Dom1, typename _Dom1::value_type>&, const typename _Dom::value_type&)'
  405 |     _DEFINE_EXPR_BINARY_OPERATOR(+, struct std::__plus)
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14.3.0/bits/valarray_after.h:405:5: note:   template argument deduction/substitution failed:
/home/builder/package/community/tiledb/src/TileDB-main/test/src/unit-s3.cc:451:76: note:   'std::__cxx11::basic_string<char>' is not derived from 'const std::_Expr<_Dom1, typename _Dom1::value_type>'
  451 |     auto full_uri = s3_test.temp_dir_.to_string() + "/" + s3_object.GetKey();
      |                                                                            ^
/usr/include/c++/14.3.0/bits/valarray_after.h:405:5: note: candidate: 'template<class _Dom> std::_Expr<std::__detail::_BinClos<std::__plus, std::_Constant, std::_Expr, typename _Dom::value_type, _Dom>, typename std::__fun<std::__plus, typename _Dom1::value_type>::result_type> std::operator+(const typename _Dom::value_type&, const _Expr<_Dom1, typename _Dom1::value_type>&)'
  405 |     _DEFINE_EXPR_BINARY_OPERATOR(+, struct std::__plus)
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14.3.0/bits/valarray_after.h:405:5: note:   template argument deduction/substitution failed:
/home/builder/package/community/tiledb/src/TileDB-main/test/src/unit-s3.cc:451:76: note:   'const Aws::String' {aka 'const std::__cxx11::basic_string<char, std::char_traits<char>, Aws::Allocator<char> >'} is not derived from 'const std::_Expr<_Dom1, typename _Dom1::value_type>'
  451 |     auto full_uri = s3_test.temp_dir_.to_string() + "/" + s3_object.GetKey();
      |                                                                            ^
/usr/include/c++/14.3.0/bits/valarray_after.h:405:5: note: candidate: 'template<class _Dom> std::_Expr<std::__detail::_BinClos<std::__plus, std::_Expr, std::_ValArray, _Dom, typename _Dom::value_type>, typename std::__fun<std::__plus, typename _Dom1::value_type>::result_type> std::operator+(const _Expr<_Dom1, typename _Dom1::value_type>&, const valarray<typename _Dom::value_type>&)'
  405 |     _DEFINE_EXPR_BINARY_OPERATOR(+, struct std::__plus)
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14.3.0/bits/valarray_after.h:405:5: note:   template argument deduction/substitution failed:
/home/builder/package/community/tiledb/src/TileDB-main/test/src/unit-s3.cc:451:76: note:   'std::__cxx11::basic_string<char>' is not derived from 'const std::_Expr<_Dom1, typename _Dom1::value_type>'
  451 |     auto full_uri = s3_test.temp_dir_.to_string() + "/" + s3_object.GetKey();
      |                                                                            ^
/usr/include/c++/14.3.0/bits/valarray_after.h:405:5: note: candidate: 'template<class _Dom> std::_Expr<std::__detail::_BinClos<std::__plus, std::_ValArray, std::_Expr, typename _Dom::value_type, _Dom>, typename std::__fun<std::__plus, typename _Dom1::value_type>::result_type> std::operator+(const valarray<typename _Dom::value_type>&, const _Expr<_Dom1, typename _Dom1::value_type>&)'
  405 |     _DEFINE_EXPR_BINARY_OPERATOR(+, struct std::__plus)
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14.3.0/bits/valarray_after.h:405:5: note:   template argument deduction/substitution failed:
/home/builder/package/community/tiledb/src/TileDB-main/test/src/unit-s3.cc:451:76: note:   'const Aws::String' {aka 'const std::__cxx11::basic_string<char, std::char_traits<char>, Aws::Allocator<char> >'} is not derived from 'const std::_Expr<_Dom1, typename _Dom1::value_type>'
  451 |     auto full_uri = s3_test.temp_dir_.to_string() + "/" + s3_object.GetKey();
      |                                                                            ^
/usr/include/c++/14.3.0/valarray:1196:1: note: candidate: 'template<class _Tp> std::_Expr<std::__detail::_BinClos<std::__plus, std::_ValArray, std::_ValArray, _Tp, _Tp>, typename std::__fun<std::__plus, _Tp>::result_type> std::operator+(const valarray<_Tp>&, const valarray<_Tp>&)'
 1196 | _DEFINE_BINARY_OPERATOR(+, __plus)
      | ^~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14.3.0/valarray:1196:1: note:   template argument deduction/substitution failed:
/home/builder/package/community/tiledb/src/TileDB-main/test/src/unit-s3.cc:451:76: note:   'std::__cxx11::basic_string<char>' is not derived from 'const std::valarray<_Tp>'
  451 |     auto full_uri = s3_test.temp_dir_.to_string() + "/" + s3_object.GetKey();
      |                                                                            ^
/usr/include/c++/14.3.0/valarray:1196:1: note: candidate: 'template<class _Tp> std::_Expr<std::__detail::_BinClos<std::__plus, std::_ValArray, std::_Constant, _Tp, _Tp>, typename std::__fun<std::__plus, _Tp>::result_type> std::operator+(const valarray<_Tp>&, const typename valarray<_Tp>::value_type&)'
 1196 | _DEFINE_BINARY_OPERATOR(+, __plus)
      | ^~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14.3.0/valarray:1196:1: note:   template argument deduction/substitution failed:
/home/builder/package/community/tiledb/src/TileDB-main/test/src/unit-s3.cc:451:76: note:   'std::__cxx11::basic_string<char>' is not derived from 'const std::valarray<_Tp>'
  451 |     auto full_uri = s3_test.temp_dir_.to_string() + "/" + s3_object.GetKey();
      |                                                                            ^
/usr/include/c++/14.3.0/valarray:1196:1: note: candidate: 'template<class _Tp> std::_Expr<std::__detail::_BinClos<std::__plus, std::_Constant, std::_ValArray, _Tp, _Tp>, typename std::__fun<std::__plus, _Tp>::result_type> std::operator+(const typename valarray<_Tp>::value_type&, const valarray<_Tp>&)'
 1196 | _DEFINE_BINARY_OPERATOR(+, __plus)
      | ^~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14.3.0/valarray:1196:1: note:   template argument deduction/substitution failed:
/home/builder/package/community/tiledb/src/TileDB-main/test/src/unit-s3.cc:451:76: note:   'const Aws::String' {aka 'const std::__cxx11::basic_string<char, std::char_traits<char>, Aws::Allocator<char> >'} is not derived from 'const std::valarray<_Tp>'
  451 |     auto full_uri = s3_test.temp_dir_.to_string() + "/" + s3_object.GetKey();
      |                                                                            ^
ninja: subcommand failed
>>> ERROR: tiledb: build failed

I will try to put together a Dockerfile, but it is difficult because some Alpine packages need patches as well tiledb needs to be patched. Let's see what I can do.

@teo-tsirpanis
Copy link
Member Author

Great news. There were only two errors in the tests that are fixed. Can you validate again? You don't have to make the Dockerfile if it's hard; s3.h is used only by s3.cc and unit-s3.cc and it's very likely that all errors are by now fixed.

@hjaekel
Copy link

hjaekel commented Jun 18, 2025

Great, everything compiles now against aws-sdk-cpp-1.11.584 on Alpine Linux Edge. However, I have not tested the library with an S3.

Thank you for your support.

@teo-tsirpanis teo-tsirpanis marked this pull request as ready for review June 18, 2025 22:05
@teo-tsirpanis teo-tsirpanis requested review from ypatia and rroelke June 18, 2025 22:05
@teo-tsirpanis
Copy link
Member Author

PR ready for review and validated. I believe that we should backport it to 2.28.x.

Regarding regression testing for these compile errors, I don't think it would be worthwhile to add. Building with the AWS SDK in -DCUSTOM_MEMORY_MANAGEMENT=ON is not in our first-party CI or release scenarios, and any regressions will be easier to deal with once reported. I can add a comment somewhere explaining the nuances between Aws::String and std::string.

@ypatia
Copy link
Member

ypatia commented Jun 19, 2025

PR ready for review and validated. I believe that we should backport it to 2.28.x.

Regarding regression testing for these compile errors, I don't think it would be worthwhile to add. Building with the AWS SDK in -DCUSTOM_MEMORY_MANAGEMENT=ON is not in our first-party CI or release scenarios, and any regressions will be easier to deal with once reported. I can add a comment somewhere explaining the nuances between Aws::String and std::string.

Let's both add a comment and backport. Thanks for the fix!

@teo-tsirpanis teo-tsirpanis merged commit 2e7407d into main Jun 24, 2025
107 of 108 checks passed
@teo-tsirpanis teo-tsirpanis deleted the teo/s3-strings branch June 24, 2025 16:01
@teo-tsirpanis
Copy link
Member Author

/backport to release-2.28

Copy link
Contributor

Started backporting to release-2.28: https://github.com/TileDB-Inc/TileDB/actions/runs/15855545883

Copy link
Contributor

@teo-tsirpanis backporting to "release-2.28" failed, the patch most likely resulted in conflicts:

$ git am --3way --empty=keep --ignore-whitespace --keep-non-patch changes.patch

Applying: Fix and optimize string conversions in the S3 VFS.
Using index info to reconstruct a base tree...
M	tiledb/sm/filesystem/s3.cc
Falling back to patching base and 3-way merge...
Auto-merging tiledb/sm/filesystem/s3.cc
CONFLICT (content): Merge conflict in tiledb/sm/filesystem/s3.cc
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
hint: When you have resolved this problem, run "git am --continue".
hint: If you prefer to skip this patch, run "git am --skip" instead.
hint: To restore the original branch and stop patching, run "git am --abort".
hint: Disable this message with "git config set advice.mergeConflict false"
Patch failed at 0001 Fix and optimize string conversions in the S3 VFS.
Error: The process '/usr/bin/git' failed with exit code 128

Please backport manually!

teo-tsirpanis added a commit that referenced this pull request Jun 24, 2025
Fixes #5352.

---
TYPE: BUG
DESC: Fixed compile errors in the S3 VFS.
teo-tsirpanis added a commit that referenced this pull request Jun 25, 2025
… VFS. (#5545) (#5554)

Backport of #5545 to release-2.28

---
TYPE: BUG
DESC: Fixed compile errors in the S3 VFS.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Build fails against recent external aws-sdk-cpp fails
3 participants