Joshua L created THRIFT-5465:
--------------------------------

             Summary: TEnumIterator lacks equality operator and fails when used 
in gcc debug containers.
                 Key: THRIFT-5465
                 URL: https://issues.apache.org/jira/browse/THRIFT-5465
             Project: Thrift
          Issue Type: Bug
          Components: C++ - Library
         Environment: Compiler: (GCC) 11.1.0

OS: Arch Linux
            Reporter: Joshua L


When compiling Apache arrow parquet like so:
{code:java}
cmake ../ -DCMAKE_BUILD_TYPE=DEBUG -DARROW_CXXFLAGS="-D_GLIBCXX_DEBUG" 
-DARROW_PARQUET=1 {code}
The following error occurs in thrift compiler generated code:
{code:java}
/usr/include/c++/11.1.0/debug/map.h:151:5:   required from 
‘std::__debug::map<_Key, _Tp, _Cmp, _Allocator>::map(_InputIterator, 
_InputIterator, const _Compare&, const _Allocator&) [with _InputIterator = 
apache::thrift::TEnumIterator; _Key = int; _Tp = co
nst char*; _Compare = std::less<int>; _Allocator = 
std::allocator<std::pair<const int, const char*> >]’                        
/home/snapcore/arrow/cpp/src/generated/parquet_types.cpp:36:166:   required 
from here                                                                       
                                                                                
                  
/usr/include/c++/11.1.0/debug/helper_functions.h:174:22: error: no match for 
‘operator==’ (operand types are ‘apache::thrift::TEnumIterator’ and 
‘apache::thrift::TEnumIterator’)                                                
                             
  174 |       return __first == __last                                          
      
{code}
This is because the type TEnumIterator is being stored in a stl debug map:
{code:java}
const std::map<int, const char*> 
_Type_VALUES_TO_NAMES(::apache::thrift::TEnumIterator(8, _kTypeValues, 
_kTypeNames), ::apache::thrift::TEnumIterator(-1, NULL, NULL));
{code}
that does an equality comparison on types stored for validity, but 
TEnumIterator lacks a comparison operator on non-windows platforms it seems:

A very simple solution here is to add to Thrift.h:

{code:java}
#include <thrift/windows/Operators.h>{code}
which includes a dummy comparison operator I believe. Probably not ideal, but 
that is the current workaround I found.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to