Fix and optimize string conversions in the S3 VFS.
Fixes #5352.
TYPE: BUG DESC: Fixed compile errors in the S3 VFS.
@hjaekel my latest commits should fix the problems reported in https://github.com/TileDB-Inc/TileDB/issues/5352#issuecomment-2976538081. I tried building from source using an Alpine Docker container but gave up after some vcpkg-related errors. Could you validate?
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
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.
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.
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.
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.
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.
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=ONis 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 betweenAws::Stringandstd::string.
Let's both add a comment and backport. Thanks for the fix!
/backport to release-2.28
Started backporting to release-2.28: https://github.com/TileDB-Inc/TileDB/actions/runs/15855545883
@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!