Closed stkrwork closed 7 years ago
Thanks for the report. It was a problem specific to g++. This is fixed with 32b5fb9320a8759a861dfdaab6b098e5949cdb90 . Note that clang++ is better at compiling silicon : lower compilation times, and better error message. There is also the ORM that does not compile yet with g++.
Hey,
when compiling this: `
include <silicon/api.hh>
include <silicon/backends/mhd.hh>
include "symbols.h"
using namespace sl; // Silicon namespace using namespace s; // Symbols namespace
int main() { // Define the API: auto hello_api = http_api(
} `
I get a compilation error. ` 13:02:52 Build of configuration Debug for project SiliconTest make pre-build main-build iod_generate_symbols ../main.cpp ../symbols.h
Building file: ../main.cpp Invoking: Cross G++ Compiler g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"main.d" -MT"main.o" -o "main.o" "../main.cpp" In file included from ../main.cpp:10:0: /usr/include/silicon/backends/mhd.hh: In instantiation of ‘sl::mhd_json_service_utils::decode_post_parameters_urlencoded(O&, sl::mhd_request) const::<lambda(auto:91)> [with auto:91 = s::_uname_t::variable_type<std::cxx11::basic_string >; P = iod::sio<s::_uname_t::variable_type<std:: cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> >, s::_pwd_t::variable_type<std::cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> > >; O = iod::sio<s::_uname_t::variable_type<std::__cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> >, s::_pwd_t::variable_type<std:: cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> > >]’:
/usr/include/iod/foreach.hh:133:29: required from ‘decltype(auto) iod::internal::sio_foreach(std::enable_if_t<(typename std::remove_reference<_To>::type:: _size != 0)> , F, T1&&, T&& ...) [with F = sl::mhd_json_service_utils::decode_post_parameters_urlencoded(O&, sl::mhd_request) const [with P = iod::sio<s::_uname_t::variable_type<std::cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> >, s::_pwd_t::variable_type<std::__cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> > >; O = iod::sio<s::_uname_t::variable_type<std:: cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> >, s::_pwd_t::variable_type<std::cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> > >]::<lambda(auto:91)>; T1 = const iod::sio<s::_uname_t::variable_type<std::__cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> >, s::_pwd_t::variable_type<std:: cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> > >&; T = {}; std::enable_if_t<(typename std::remove_reference<_To>::type:: _size != 0)> = void]’
/usr/include/iod/foreach.hh:168:42: required from ‘decltype(auto) iod::internal::foreach_sio_caller::run(F, std::index_sequence<I ...>) [with F = sl::mhd_json_service_utils::decode_post_parameters_urlencoded(O&, sl::mhd_request ) const [with P = iod::sio<s::_uname_t::variable_type<std::cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> >, s::_pwd_t::variable_type<std::__cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> > >; O = iod::sio<s::_uname_t::variable_type<std:: cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> >, s::_pwd_t::variable_type<std::cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> > >]::<lambda(auto:91)>; long unsigned int ...I = {0ul}; T = std::tuple<const iod::sio<s::_uname_t::variable_type<std::__cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> >, s::_pwd_t::variable_type<std:: cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> > >&>; std::index_sequence<I ...> = std::integer_sequence<long unsigned int, 0ul>]’
/usr/include/iod/foreach.hh:174:76: required from ‘decltype(auto) iod::internal::foreach_sio_caller::operator|(F) [with F = sl::mhd_json_service_utils::decode_post_parameters_urlencoded(O&, sl::mhd_request) const [with P = iod::sio<s::_uname_t::variable_type<std::cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> >, s::_pwd_t::variable_type<std::__cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> > >; O = iod::sio<s::_uname_t::variable_type<std:: cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> >, s::_pwd_t::variable_type<std::cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> > >]::<lambda(auto:91)>; T = std::tuple<const iod::sio<s::_uname_t::variable_type<std::__cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> >, s::_pwd_t::variable_type<std:: cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> > >&>]’
/usr/include/silicon/backends/mhd.hh:212:20: required from ‘void sl::mhd_json_service_utils::decode_post_parameters_urlencoded(O&, sl::mhd_request ) const [with P = iod::sio<s::_uname_t::variable_type<std::cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> >, s::_pwd_t::variable_type<std::__cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> > >; O = iod::sio<s::_uname_t::variable_type<std:: cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> >, s::_pwd_t::variable_type<std::cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> > >]’
/usr/include/silicon/backends/mhd.hh:254:54: required from ‘auto sl::mhd_json_service_utils::deserialize(sl::mhd_json_service_utils::request_type*, P, T&) const [with P = sl::procedure<sl::http_route<sl::http_post, std::tuple, iod::sio<>, iod::sio<>, iod::sio<s::_uname_t::variable_type<std:: cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> >, s::_pwd_t::variable_type<std::cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> > > >, iod::sio<s::_uname_t::variable_type<std::__cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> >, s::_pwd_t::variable_type<std:: cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> > >, iod::sio<s::_status_t::variable_type<const char, iod::sio<> > >, sl::bind_procedure2(F, std::tuple<_Elements ...>) [with F = main()::<lambda(auto:92)>; U = {iod::sio<s::_uname_t::variable_type<std::cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> >, s::_pwd_t::variable_type<std::__cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> > >}]::<lambda(iod::sio<s::_uname_t::variable_type<std:: cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> >, s::_pwd_t::variable_type<std::cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> > >)> >; T = iod::sio<s::_uname_t::variable_type<std::__cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> >, s::_pwd_t::variable_type<std:: cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> > >; sl::mhd_json_service_utils::request_type = sl::mhd_request]’
/usr/include/silicon/service.hh:66:34: required from ‘void sl::ws_handler<P, M, S, ARGS>::operator()(M&, S&, ARGS& ...) [with P = sl::procedure<sl::http_route<sl::http_post, std::tuple, iod::sio<>, iod::sio<>, iod::sio<s::_uname_t::variable_type<std::cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> >, s::_pwd_t::variable_type<std::__cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> > > >, iod::sio<s::_uname_t::variable_type<std:: cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> >, s::_pwd_t::variable_type<std::cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> > >, iod::sio<s::_status_t::variable_type<const char, iod::sio<> > >, sl::bind_procedure2(F, std::tuple<_Elements ...>) [with F = main()::<lambda(auto:92)>; U = {iod::sio<s::_uname_t::variable_type<std:: cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> >, s::_pwd_t::variable_type<std::cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> > >}]::<lambda(iod::sio<s::_uname_t::variable_type<std::__cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> >, s::_pwd_t::variable_type<std:: cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> > >)> >; M = std::tuple; S = sl::mhd_json_service_utils; ARGS = {sl::mhd_request, sl::mhd_response, MHD_Connection}]’
../main.cpp:35:1: required from here
/usr/include/silicon/backends/mhd.hh:219:13: error: cannot call member function ‘void sl::mhd_json_service_utils::decode_post_parameter_urlencoded(T, U&, const string&) const [with T = std::cxx11::basic_string; U = std::__cxx11::basic_string; std:: cxx11::string = std::cxx11::basic_string]’ without object
decode_post_parameter_urlencoded((std::decay_t<decltype(m.value())>*) 0,
^ cxx11::basic_string; INFO = iod::sio<>]’ before deduction of ‘auto’
if(!m.attributes().has(_optional))
~~~~~~~ /usr/include/silicon/backends/mhd.hh:230:30: error: use of ‘auto s::_uname_t::variable_type<T, INFO>::attributes() const [with T = std::In file included from /usr/include/iod/grammar.hh:6:0, from /usr/include/iod/sio.hh:9, from /usr/include/silicon/api.hh:4, from ../main.cpp:9: /usr/include/iod/foreach.hh:53:5: error: ‘void iod::internal::sio_foreach_impl(std::enable_if_t<std::is_same<void, Ret>::value>, std::index_sequence<TSize ...>, F, T&& ...) [with Ret = void; F = sl::mhd_json_service_utils::decode_post_parameters_urlencoded(O&, sl::mhd_request) const [with P = iod::sio<s::_uname_t::variable_type<std::cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> >, s::_pwd_t::variable_type<std::__cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> > >; O = iod::sio<s::_uname_t::variable_type<std:: cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> >, s::_pwd_t::variable_type<std::cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> > >]::<lambda(auto:91)>; long unsigned int ...TSize = {0ul, 1ul}; long unsigned int ...Nargs = {}; T = {const iod::sio<s::_uname_t::variable_type<std::__cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> >, s::_pwd_t::variable_type<std:: cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> > >&}; std::enable_if_t<std::is_same<void, Ret>::value> = void; std::index_sequence<TSize ...> = std::integer_sequence<long unsigned int, 0ul, 1ul>]’, declared using local type ‘sl::mhd_json_service_utils::decode_post_parameters_urlencoded(O&, sl::mhd_request) const [with P = iod::sio<s::_uname_t::variable_type<std::cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> >, s::_pwd_t::variable_type<std::__cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> > >; O = iod::sio<s::_uname_t::variable_type<std:: cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> >, s::_pwd_t::variable_type<std::__cxx11::basic_string<char, std::char_traits, std::allocator >, iod::sio<> > >]::<lambda(auto:91)>’, is used but never defined [-fpermissive]
sio_foreach_impl(std::enable_if_t<std::is_same<void, Ret>::value> ,
^
~~~subdir.mk:18: recipe for target 'main.o' failed make: *** [main.o] Error 113:02:56 Build Finished (took 3s.805ms) `
When changing the post request to a get request, everything works fine.
GET / _login * get_parameters(_uname, _pwd) = [] (auto param) {...}