emscripten-core / emscripten-core/emscripten

Unable to bind a bool vector via register_vector

Open
#19,325 2 comments 0 reactions 0 assignees View on GitHub
embind
Dominant language
C++
Stars
27.6k
Forks
3.6k
Avg merge
1d 1h
Merged PRs (30d)
105

Description

Using embind, I'm not able to register a `vector`. Other primitive types seem to be fine. After looking around a bit, I think this is related: https://stackoverflow.com/questions/17794569/why-isnt-vectorbool-a-stl-container

I've attached a minimal example.

**Version of emscripten/emsdk:**
```C:\Users\shaad\Desktop\emscripten-project>emcc -lembind src/bind.cpp
In file included from src/bind.cpp:1:
C:\Users\shaad\emsdk-2\emsdk\upstream\emscripten\cache\sysroot/include\emscripten/bind.h:1898:21: error: cannot initialize a variable of type
'void (VecType::*)(const size_t, const bool &)' with an rvalue of type 'void (std::vector::*)(size_type, value_type)': type mismatch at 2nd parameter
('const bool &' vs 'value_type' (aka 'bool'))
void (VecType::*resize)(const size_t, const T&) = &VecType::resize;
^ ~~~~~~~~~~~~~~~~
src/bind.cpp:6:3: note: in instantiation of function template specialization 'emscripten::register_vector' requested here
register_vector("BoolVector");
^
1 error generated.
emcc: error: 'C:/Users/shaad/emsdk-2/emsdk/upstream/bin\clang++.exe -target wasm32-unknown-emscripten -fignore-exceptions -fvisibility=default -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr -DEMSCRIPTEN --sysroot=C:\Users\shaad\emsdk-2\emsdk\upstream\emscripten\cache\sysroot -Xclang -iwithsysroot/include\fakesdl -Xclang -iwithsysroot/include\compat src/bind.cpp -c -o C:\Users\shaad\AppData\Local\Temp\emscripten_temp_1togm_ey\bind_0.o' failed (returned 1)
```

**Full link command and output with `-v` appended:**
```
C:\Users\shaad\Desktop\emscripten-project>emcc -v -lembind src/bind.cpp
"C:/Users/shaad/emsdk-2/emsdk/upstream/bin\clang.exe" --version
"C:/Users/shaad/emsdk-2/emsdk/upstream/bin\clang++.exe" -target wasm32-unknown-emscripten -fignore-exceptions -fvisibility=default -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr -DEMSCRIPTEN --sysroot=C:\Users\shaad\emsdk-2\emsdk\upstream\emscripten\cache\sysroot -Xclang -iwithsysroot/include\fakesdl -Xclang -iwithsysroot/include\compat -v src/bind.cpp -c -o C:\Users\shaad\AppData\Local\Temp\emscripten_temp_9f1dzq49\bind_0.o
clang version 17.0.0 (https://github.com/llvm/llvm-project 86339ef088e9aac6cf52cf9022d7a5bd144d4c42)
Target: wasm32-unknown-emscripten
Thread model: posix
InstalledDir: C:\Users\shaad\emsdk-2\emsdk\upstream\bin
(in-process)
"C:\\Users\\shaad\\emsdk-2\\emsdk\\upstream\\bin\\clang++.exe" -cc1 -triple wasm32-unknown-emscripten -emit-obj -mrelax-all -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name bind.cpp -mrelocation-model static -mframe-pointer=none -ffp-contract=on -fno-rounding-math -mconstructor-aliases -target-cpu generic -debugger-tuning=gdb -v "-fcoverage-compilation-dir=C:\\Users\\shaad\\Desktop\\emscripten-project" -resource-dir "C:\\Users\\shaad\\emsdk-2\\emsdk\\upstream\\lib\\clang\\17" -D EMSCRIPTEN -isysroot "C:\\Users\\shaad\\emsdk-2\\emsdk\\upstream\\emscripten\\cache\\sysroot" -internal-isystem "C:\\Users\\shaad\\emsdk-2\\emsdk\\upstream\\emscripten\\cache\\sysroot/include/wasm32-emscripten/c++/v1" -internal-isystem "C:\\Users\\shaad\\emsdk-2\\emsdk\\upstream\\emscripten\\cache\\sysroot/include/c++/v1" -internal-isystem "C:\\Users\\shaad\\emsdk-2\\emsdk\\upstream\\lib\\clang\\17\\include" -internal-isystem "C:\\Users\\shaad\\emsdk-2\\emsdk\\upstream\\emscripten\\cache\\sysroot/include/wasm32-emscripten" -internal-isystem "C:\\Users\\shaad\\emsdk-2\\emsdk\\upstream\\emscripten\\cache\\sysroot/include" -fdeprecated-macro "-fdebug-compilation-dir=C:\\Users\\shaad\\Desktop\\emscripten-project" -ferror-limit 19 -fmessage-length=163 -fvisibility=default -fgnuc-version=4.2.1 -fcxx-exceptions -fignore-exceptions -fexceptions -fcolor-diagnostics "-iwithsysroot/include\\fakesdl" "-iwithsysroot/include\\compat" -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr -o "C:\\Users\\shaad\\AppData\\Local\\Temp\\emscripten_temp_9f1dzq49\\bind_0.o" -x c++ src/bind.cpp
clang -cc1 version 17.0.0 based upon LLVM 17.0.0git default target x86_64-pc-windows-msvc
ignoring nonexistent directory "C:\Users\shaad\emsdk-2\emsdk\upstream\emscripten\cache\sysroot/include/wasm32-emscripten/c++/v1"
ignoring nonexistent directory "C:\Users\shaad\emsdk-2\emsdk\upstream\emscripten\cache\sysroot/include/wasm32-emscripten"
#include "..." search starts here:
#include <...> search starts here:
C:\Users\shaad\emsdk-2\emsdk\upstream\emscripten\cache\sysroot/include\fakesdl
C:\Users\shaad\emsdk-2\emsdk\upstream\emscripten\cache\sysroot/include\compat
C:\Users\shaad\emsdk-2\emsdk\upstream\emscripten\cache\sysroot/include/c++/v1
C:\Users\shaad\emsdk-2\emsdk\upstream\lib\clang\17\include
C:\Users\shaad\emsdk-2\emsdk\upstream\emscripten\cache\sysroot/include
End of search list.
In file included from src/bind.cpp:1:
C:\Users\shaad\emsdk-2\emsdk\upstream\emscripten\cache\sysroot/include\emscripten/bind.h:1898:21: error: cannot initialize a variable of type
'void (VecType::*)(const size_t, const bool &)' with an rvalue of type 'void (std::vector::*)(size_type, value_type)': type mismatch at 2nd parameter
('const bool &' vs 'value_type' (aka 'bool'))
void (VecType::*resize)(const size_t, const T&) = &VecType::resize;
^ ~~~~~~~~~~~~~~~~
src/bind.cpp:6:3: note: in instantiation of function template specialization 'emscripten::register_vector' requested here
register_vector("BoolVector");
^
1 error generated.
emcc: error: 'C:/Users/shaad/emsdk-2/emsdk/upstream/bin\clang++.exe -target wasm32-unknown-emscripten -fignore-exceptions -fvisibility=default -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr -DEMSCRIPTEN --sysroot=C:\Users\shaad\emsdk-2\emsdk\upstream\emscripten\cache\sysroot -Xclang -iwithsysroot/include\fakesdl -Xclang -iwithsysroot/include\compat -v src/bind.cpp -c -o C:\Users\shaad\AppData\Local\Temp\emscripten_temp_9f1dzq49\bind_0.o' failed (returned 1)
```
[emscripten-project.zip](https://github.com/emscripten-core/emscripten/files/11441105/emscripten-project.zip)

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.