Giter Site home page Giter Site logo

Comments (18)

ColinH avatar ColinH commented on May 14, 2024

That's strange, we do CI builds on macOS, and my main development platform is macOS, and usually everything works. Which compiler and C++ library are you using? Are you actually cross-compiling?

from json.

robinchrist avatar robinchrist commented on May 14, 2024

We use Clang 7.0.1 together with cmake-ts on Linux to crosscompile our native node addons for Windows, Linux and Mac.

from json.

ColinH avatar ColinH commented on May 14, 2024

We do CI builds with Clang 7, so it shouldn't be the compiler. Are you using libc++ or libstdc++?

from json.

robinchrist avatar robinchrist commented on May 14, 2024

The offending line was

templObj.emplace("FrontFacing", templ.getFrontFacing());

where

const std::vector<bool>& getFrontFacing() const;

Full error log:
https://pastebin.com/Xn04DyUu

My first workaround attempt was a helper function

tao::json::value booleanVecToArray(const std::vector<bool>& vec) {
    tao::json::value arr = tao::json::empty_array;
    for(const auto& val : vec) {
        arr.push_back(val);
    }

    return arr;
}

Which does not work too
https://pastebin.com/TDDdBXmd

Changing to

tao::json::value jsonValue = val;
arr.push_back(std::move(jsonValue));

doesn't work either

../../../../../secretprojectname/src/util/jsonutil.cpp:135:13: error: no matching member function for call to 'push_back'
        arr.push_back(val);
        ~~~~^~~~~~~~~
../../../../../secretprojectname/include/tao/json/binding/internal/../../basic_value.hpp:892:12: note: candidate function not viable: no known conversion from 'const std::__1::__bit_const_reference<std::__1::vector<bool, std::__1::allocator<bool> > >' to 'const tao::json::basic_value<traits>' for 1st argument
      void push_back( const basic_value& v )
           ^
../../../../../secretprojectname/include/tao/json/binding/internal/../../basic_value.hpp:898:12: note: candidate function not viable: no known conversion from 'const std::__1::__bit_const_reference<std::__1::vector<bool, std::__1::allocator<bool> > >' to 'tao::json::basic_value<traits>' for 1st argument
      void push_back( basic_value&& v )

Finally

for(const bool val : vec) {
        tao::json::value jsonValue = val;
        arr.push_back(std::move(jsonValue));
    }

So I'd say there are some serious issues with const-refs to std::vector<bool> with the libc++ OSX SDK

from json.

ColinH avatar ColinH commented on May 14, 2024

So the issue is that there is no tao::json::traits< std::vector< bool > > specialisation?

from json.

robinchrist avatar robinchrist commented on May 14, 2024

@ColinH see my updated comment #54 (comment)

from json.

ColinH avatar ColinH commented on May 14, 2024

In the first work-around, try arr.push_back(bool(val)), since val will be the weird proxy object instead of the actual bool.

from json.

robinchrist avatar robinchrist commented on May 14, 2024

In the first work-around, try arr.push_back(bool(val)), since val will be the weird proxy object instead of the actual bool.

I'm sure this would work. However, I'm more concerned by the fact, that the OSX std::vector<bool> implementation is broken and delivers some weird proxy object (std::__1::__bit_const_reference<...>)

Actually nlohmann/json had the same problem, see nlohmann/json#494

from json.

ColinH avatar ColinH commented on May 14, 2024

That's not broken, std::vector< bool > is strange by (ancient) design, in other words it's not a bug it's a feature!

https://en.cppreference.com/w/cpp/container/vector_bool

from json.

ColinH avatar ColinH commented on May 14, 2024

What's missing is a specialisation of the traits for std::vector< bool >, shouldn't take too long, I'll see when I get around to it.

from json.

robinchrist avatar robinchrist commented on May 14, 2024

I know of the peculiarities of std::vector<bool>. I was really surprised, that it worked on Linux and Windows, but not on OSX...

from json.

ColinH avatar ColinH commented on May 14, 2024

That is somewhat surprising.

from json.

d-frey avatar d-frey commented on May 14, 2024

from json.

ColinH avatar ColinH commented on May 14, 2024

@robinchrist Can you please test whether the latest commit fixes the issue?

from json.

robinchrist avatar robinchrist commented on May 14, 2024

@ColinH Sure, will report back ASAP

from json.

robinchrist avatar robinchrist commented on May 14, 2024

@ColinH CI build works fine!

from json.

ColinH avatar ColinH commented on May 14, 2024

Great. Did you see which library you are using on the different platforms?

from json.

robinchrist avatar robinchrist commented on May 14, 2024

As far as I know it's libstdc++ for linux and standard CRT for Windows

from json.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.