Comments (18)
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.
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.
We do CI builds with Clang 7, so it shouldn't be the compiler. Are you using libc++
or libstdc++
?
from json.
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.
So the issue is that there is no tao::json::traits< std::vector< bool > >
specialisation?
from json.
@ColinH see my updated comment #54 (comment)
from json.
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.
In the first work-around, try
arr.push_back(bool(val))
, sinceval
will be the weird proxy object instead of the actualbool
.
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.
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.
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.
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.
That is somewhat surprising.
from json.
from json.
@robinchrist Can you please test whether the latest commit fixes the issue?
from json.
@ColinH Sure, will report back ASAP
from json.
@ColinH CI build works fine!
from json.
Great. Did you see which library you are using on the different platforms?
from json.
As far as I know it's libstdc++ for linux and standard CRT for Windows
from json.
Related Issues (20)
- How to write cbor/jaxn/msgpack and other file ? HOT 1
- demangle.hpp build failure for MSVC HOT 1
- How can we improve tao-json performance ? HOT 2
- transforming unsigned to chrono::duration HOT 2
- the conan package at https://conan.io/center/taocpp-json missing to/from_nolhmann.hpp files HOT 2
- Stack-overflow occured when parsing a bad json file HOT 2
- why isn't to/from_nolhmann.hpp files are excluded from contrib folder on release HOT 1
- Binding questions HOT 14
- Issues using 1.0.0-beta.13 with C++20 HOT 5
- About the first stable version of Taojson HOT 1
- looks like `tao::json::value::operator[]` doesn't accept string as a key HOT 3
- simple json program won't compile on raspberry pi bullseye HOT 6
- feature request: std::string_view as first argument to TAO_JSON_BIND_REQUIRED HOT 3
- `rewind_mode::dontcare` not implemented in PEGTL? HOT 1
- Reset Event consumer? HOT 2
- Question: conditionally group bindings in a trait?
- json main cannot be compiled with PEGTL main
- Question: nesting binding::object in one binding trait definition possible/supported? HOT 3
- traits: ability to define what optional means HOT 7
- Benchmarks? HOT 8
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from json.