apache arrow 的问题:错误 C2668:'arrow::internal::launder':对重载函数的不明确调用

Dar*_*azi 0 c++ cmake vcpkg apache-arrow

我开始使用 Apache arrow。我是通过vcpkg安装的。一切都很好,直到我将安装的 arrow 更新到 6.0.1。我使用 powershell 控制台中的以下命令安装了它:

vcpkg install arrow:x64-windows-static
Run Code Online (Sandbox Code Playgroud)

它已成功安装,我看到了成功消息(不知何故):

The package arrow provides CMake targets:
        find_package(arrow CONFIG REQUIRED)
        target_link_libraries(main PRIVATE re2::re2 arrow_static parquet_static arrow_bundled_dependencies)
Run Code Online (Sandbox Code Playgroud)

我有一个名为csv_column_test.cpp. 然后我注释掉了该文件的所有内容,除了这两行:

#define ARROW_STATIC
#include <arrow/api.h>
Run Code Online (Sandbox Code Playgroud)

并尝试编译它。我不断遇到这个错误:

error C2668: 'arrow::internal::launder': ambiguous call to overloaded function
Run Code Online (Sandbox Code Playgroud)

我想念什么?如何让事情再次运转?

谢谢。

这是完整的错误日志:

>------ Build All started: Project: StockPredII, Configuration: x64-Debug (default) ------
  [1/2] Building CXX object splib\CMakeFiles\splib_test.dir\sparrow\csv_column_test.cpp.obj
  FAILED: splib/CMakeFiles/splib_test.dir/sparrow/csv_column_test.cpp.obj 
  C:\PROGRA~2\MICROS~4\2019\PROFES~1\VC\Tools\MSVC\1429~1.301\bin\Hostx64\x64\cl.exe  /nologo /TP -DARROW_DEPENDENCY_SOURCE=VCPKG -D_SILENCE_CXX17_RESULT_OF_DEPRECATION_WARNING -I\Catch2\include -I..\..\..\splib -IE:\sandbox\vcpkg\installed\x64-windows-static\include /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MTd /Zi /Ob0 /Od /RTC1 -std:c++17 /showIncludes /Fosplib\CMakeFiles\splib_test.dir\sparrow\csv_column_test.cpp.obj /Fdsplib\CMakeFiles\splib_test.dir\ /FS -c ..\..\..\splib\sparrow\csv_column_test.cpp
E:\sandbox\vcpkg\installed\x64-windows-static\include\arrow\util\aligned_storage.h(36): error C2668: 'arrow::internal::launder': ambiguous call to overloaded function
  E:\sandbox\vcpkg\installed\x64-windows-static\include\arrow/util/launder.h(29): note: could be 'T *arrow::internal::launder<T>(T *) noexcept'
          with
          [
              T=std::unique_ptr<arrow::Buffer,std::default_delete<arrow::Buffer>>
          ]
  C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.29.30133\include\new(33): note: or       '_Ty *std::launder<T>(_Ty *) noexcept' [found using argument-dependent lookup]
          with
          [
              _Ty=std::unique_ptr<arrow::Buffer,std::default_delete<arrow::Buffer>>,
              T=std::unique_ptr<arrow::Buffer,std::default_delete<arrow::Buffer>>
          ]
  E:\sandbox\vcpkg\installed\x64-windows-static\include\arrow/util/aligned_storage.h(36): note: while trying to match the argument list '(T *)'
          with
          [
              T=std::unique_ptr<arrow::Buffer,std::default_delete<arrow::Buffer>>
          ]
  E:\sandbox\vcpkg\installed\x64-windows-static\include\arrow/util/aligned_storage.h(36): note: while compiling class template member function 'T *arrow::internal::AlignedStorage<T>::get(void) noexcept'
          with
          [
              T=std::unique_ptr<arrow::Buffer,std::default_delete<arrow::Buffer>>
          ]
  E:\sandbox\vcpkg\installed\x64-windows-static\include\arrow/result.h(431): note: see reference to function template instantiation 'T *arrow::internal::AlignedStorage<T>::get(void) noexcept' being compiled
          with
          [
              T=std::unique_ptr<arrow::Buffer,std::default_delete<arrow::Buffer>>
          ]
  E:\sandbox\vcpkg\installed\x64-windows-static\include\arrow/result.h(435): note: see reference to class template instantiation 'arrow::internal::AlignedStorage<T>' being compiled
          with
          [
              T=std::unique_ptr<arrow::Buffer,std::default_delete<arrow::Buffer>>
          ]
  E:\sandbox\vcpkg\installed\x64-windows-static\include\arrow/buffer_builder.h(156): note: see reference to class template instantiation 'arrow::Result<std::unique_ptr<arrow::Buffer,std::default_delete<arrow::Buffer>>>' being compiled
  ninja: build stopped: subcommand failed.

Build All failed.
Run Code Online (Sandbox Code Playgroud)

顺便说一下,我在 CmakeLists.txt 中使用这个脚本来查找箭头:

find_package(arrow CONFIG REQUIRED)
if (${arrow_FOUND}) 
    message(STATUS "Found Apache Arrow: ${arrow_FOUND}")
    message(STATUS "Apache Arrow Version: ${ARROW_VERSION}")
    message(STATUS "Apache Arrow DLL Version: ${ARROW_FULL_SO_VERSION}")
endif()
Run Code Online (Sandbox Code Playgroud)

这是此代码片段的 cmake 输出:

1> [CMake] -- Found thrift: E:/sandbox/vcpkg/installed/x64-windows-static
1> [CMake] -- Found Apache Arrow: 1
1> [CMake] -- Apache Arrow Version: 6.0.1
1> [CMake] -- Apache Arrow DLL Version: 600.1.0
Run Code Online (Sandbox Code Playgroud)

use*_*522 7

这是Apache Arrow 中的一个错误,已在 2021 年 12 月的此提交中修复。

我认为它将包含在下一个版本中。

std::launder这是由于C++17中标准库中引入了引起的。因此,如果您针对较旧的标准版本进行编译(如果可能),则不应遇到这种情况。