This is an automated email from the ASF dual-hosted git repository.

paleolimbot pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-nanoarrow.git


The following commit(s) were added to refs/heads/main by this push:
     new 9f75836a fix: Ensure nanoarrow.hpp compiles on gcc 4.8 (#472)
9f75836a is described below

commit 9f75836a932aa38f43ad02af48bbddeab06453f6
Author: Dewey Dunnington <[email protected]>
AuthorDate: Wed May 15 16:32:17 2024 -0300

    fix: Ensure nanoarrow.hpp compiles on gcc 4.8 (#472)
    
    Apparently gcc4.8 takes issue with the use of braces in some places and
    does not provide `is_trivially_copyable()` or `std::size()` 🤷
    
    Closes #462 .
    
    Tested via
    
    ```
    export NANOARROW_PLATFORM=centos7
    export NANOARROW_ARCH=arm64  # because I'm on MacOS M1
    docker compose run --rm verify
    ```
---
 src/nanoarrow/nanoarrow.hpp         | 15 ++++++++-------
 src/nanoarrow/nanoarrow_hpp_test.cc |  6 +++---
 2 files changed, 11 insertions(+), 10 deletions(-)

diff --git a/src/nanoarrow/nanoarrow.hpp b/src/nanoarrow/nanoarrow.hpp
index a0459b41..0de2371b 100644
--- a/src/nanoarrow/nanoarrow.hpp
+++ b/src/nanoarrow/nanoarrow.hpp
@@ -556,11 +556,11 @@ struct Nothing {};
 template <typename T>
 class Maybe {
  public:
-  Maybe() : nothing_{Nothing{}}, is_something_{false} {}
-  Maybe(Nothing) : Maybe{} {}
+  Maybe() : nothing_(Nothing()), is_something_(false) {}
+  Maybe(Nothing) : Maybe() {}
 
   Maybe(T something)  // NOLINT(google-explicit-constructor)
-      : something_{something}, is_something_{true} {}
+      : something_(something), is_something_(true) {}
 
   explicit constexpr operator bool() const { return is_something_; }
 
@@ -575,7 +575,8 @@ class Maybe {
   T value_or(T val) const { return is_something_ ? something_ : val; }
 
  private:
-  static_assert(std::is_trivially_copyable<T>::value, "");
+  // When support for gcc 4.8 is dropped, we should also assert
+  // is_trivially_copyable<T>::value
   static_assert(std::is_trivially_destructible<T>::value, "");
 
   union {
@@ -631,7 +632,7 @@ struct InputRange {
   };
 
   iterator begin() { return {this, next()}; }
-  iterator end() { return {this, {}}; }
+  iterator end() { return {this, ValueOrFalsy()}; }
 };
 }  // namespace internal
 
@@ -825,7 +826,7 @@ class ViewArrayAsFixedSizeBytes {
 class ViewArrayStream {
  public:
   ViewArrayStream(ArrowArrayStream* stream, ArrowErrorCode* code, ArrowError* 
error)
-      : range_{Next{this, stream, UniqueArray{}}}, code_{code}, error_{error} 
{}
+      : range_{Next{this, stream, UniqueArray()}}, code_{code}, error_{error} 
{}
 
   ViewArrayStream(ArrowArrayStream* stream, ArrowError* error)
       : ViewArrayStream{stream, &internal_code_, error} {}
@@ -905,7 +906,7 @@ inline bool operator==(ArrowStringView l, ArrowStringView 
r) {
 }
 
 /// \brief User literal operator allowing ArrowStringView construction like 
"str"_sv
-inline ArrowStringView operator""_v(const char* data, std::size_t size_bytes) {
+inline ArrowStringView operator"" _v(const char* data, std::size_t size_bytes) 
{
   return {data, static_cast<int64_t>(size_bytes)};
 }
 /// @}
diff --git a/src/nanoarrow/nanoarrow_hpp_test.cc 
b/src/nanoarrow/nanoarrow_hpp_test.cc
index e5ab6716..05b6b8de 100644
--- a/src/nanoarrow/nanoarrow_hpp_test.cc
+++ b/src/nanoarrow/nanoarrow_hpp_test.cc
@@ -271,7 +271,7 @@ TEST(NanoarrowHppTest, NanoarrowHppViewArrayAsTest) {
   struct ArrowArray array {};
   array.length = 7;
   array.null_count = 2;
-  array.n_buffers = std::size(buffers);
+  array.n_buffers = 2;
   array.buffers = buffers;
 
   int i = 0;
@@ -300,7 +300,7 @@ TEST(NanoarrowHppTest, NanoarrowHppViewArrayAsBytesTest) {
   struct ArrowArray array {};
   array.length = 7;
   array.null_count = 2;
-  array.n_buffers = std::size(buffers);
+  array.n_buffers = 2;
   array.buffers = buffers;
 
   int i = 0;
@@ -327,7 +327,7 @@ TEST(NanoarrowHppTest, 
NanoarrowHppViewArrayAsFixedSizeBytesTest) {
   struct ArrowArray array {};
   array.length = 7;
   array.null_count = 2;
-  array.n_buffers = std::size(buffers);
+  array.n_buffers = 2;
   array.buffers = buffers;
 
   int i = 0;

Reply via email to