vision-dbms / vision

The master repository for the Vision database system.
https://vision-dbms.com
BSD 3-Clause "New" or "Revised" License
27 stars 12 forks source link

CAM StreamCapture does not compile with g++ version 7.2 #40

Open MichaelJCaruso opened 6 years ago

MichaelJCaruso commented 6 years ago

Either g++ version 7 or the iostream headers it ships with complain about ambiguous overloads when the live version of cam.h's 'StreamCapture' is compiled. Here's one of the error sequences that results:

In file included from ../kernel/V_VCamLog.cpp:27:0:
../kernel/cam.h: In member function ‘void CAM::Operation::associateParent(const string&, const string&)’:
../kernel/cam.h:261:13: error: ambiguous overload for ‘operator<<’ (operand types are ‘StreamCapture’ and ‘const char [18]’)
           StreamCapture()
           ~~~~~~~~~~~~~~~
             << "associateParentId" << parentId
             ^~~~~~~~~~~~~~~~~~~~~~
../kernel/cam.h:57:42: note: candidate: StreamCapture& StreamCapture::operator<<(const T&) [with T = char [18]]
     template <typename T> StreamCapture& operator<<(const T& rhs) {
                                          ^~~~~~~~
In file included from /usr/include/c++/7/iostream:39:0,
                   from ../kernel/cam.h:10,
                   from ../kernel/V_VCamLog.cpp:27:
  /usr/include/c++/7/ostream:682:5: note: candidate: typename std::enable_if<std::__and_<std::__not_<std::is_lvalue_reference<_Tp> >, std::__is_convertible_to_basic_ostream<_Ostream>, std::__is_insertable<typename std::__is_convertible_to_basic_ostream<_Tp>::__ostream_type, const _Tp&, void> >::value, typename std::__is_convertible_to_basic_ostream<_Tp>::__ostream_type>::type std::operator<<(_Ostream&&, const _Tp&) [with _Ostream = StreamCapture; _Tp = char [18]; typename std::enable_if<std::__and_<std::__not_<std::is_lvalue_reference<_Tp> >, std::__is_convertible_to_basic_ostream<_Ostream>, std::__is_insertable<typename std::__is_convertible_to_basic_ostream<_Tp>::__ostream_type, const _Tp&, void> >::value, typename std::__is_convertible_to_basic_ostream<_Tp>::__ostream_type>::type = std::basic_ostream<char>&]
     operator<<(_Ostream&& __os, const _Tp& __x)
     ^~~~~~~~

See commit 4cae07c for a stop gap resolution for this problem.