Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Build error for 32bit in named_parameters.cpp #449

Open
thorsten-klein opened this issue Oct 24, 2019 · 1 comment
Open

Build error for 32bit in named_parameters.cpp #449

thorsten-klein opened this issue Oct 24, 2019 · 1 comment

Comments

@thorsten-klein
Copy link

thorsten-klein commented Oct 24, 2019

Expected Behavior

Compilation finishes successful

Actual Behavior

Build is failing with following errors:

In file included from named_parameters.cpp:11:0:
/home/default/work/di/extension/include/boost/di/extension/injections/named_parameters.hpp: In instantiation of ‘struct boost::di::v1_1_0::extension::parse<example::boost_di_inject__, int, 2>’:
/home/default/work/di/extension/include/boost/di/extension/injections/named_parameters.hpp:97:69:   required from ‘struct boost::di::v1_1_0::extension::args_impl<example::boost_di_inject__, boost::di::v1_1_0::aux::index_sequence<0, 1, 2>, int, std::unique_ptr<interface, std::default_delete<interface> >, int>’
/home/default/work/di/extension/include/boost/di/extension/injections/named_parameters.hpp:105:97:   required from ‘struct boost::di::v1_1_0::extension::args__<true, example::boost_di_inject__, int, std::unique_ptr<interface, std::default_delete<interface> >, int>’
/home/default/work/di/extension/include/boost/di/extension/injections/named_parameters.hpp:115:69:   required from ‘struct boost::di::v1_1_0::extension::args<example::boost_di_inject__ (*)(int, std::unique_ptr<interface>, int)>’
/home/default/work/di/extension/include/boost/di/extension/injections/named_parameters.hpp:124:38:   required by substitution of ‘template<class T> using args_t = typename boost::di::v1_1_0::extension::args::type [with T = example::boost_di_inject__ (*)(int, std::unique_ptr<interface>, int)]’
named_parameters.cpp:29:3:   required from here
/home/default/work/di/extension/include/boost/di/extension/injections/named_parameters.hpp:89:120: error: overflow in constant expression [-fpermissive]
                                   named<aux::integral_constant<long, const_hash(&T::str[name.begin], name.end)>, TArg>>;
                                                                                                                        ^
/home/default/work/di/extension/include/boost/di/extension/injections/named_parameters.hpp:89:120: note: in template argument for type ‘long int’ 
/home/default/work/di/extension/include/boost/di/extension/injections/named_parameters.hpp: In instantiation of ‘constexpr auto boost::di::v1_1_0::extension::operator""_s() [with T = char; T ...Chars = {'m', 'y', '_', 'v', 'a', 'l', 'u', 'e'}]’:
named_parameters.cpp:44:27:   required from here
/home/default/work/di/extension/include/boost/di/extension/injections/named_parameters.hpp:52:92: error: overflow in constant expression [-fpermissive]
   return aux::integral_constant<long, const_hash(chars<Chars...>{}, sizeof...(Chars) + 1)>{};
                                                                                            ^
/home/default/work/di/extension/include/boost/di/extension/injections/named_parameters.hpp:52:92: note: in template argument for type ‘long int’ 
named_parameters.cpp: In function ‘int main()’:
named_parameters.cpp:44:39: error: invalid use of void expression
     , di::bind<int>.named("my_value"_s).to(87)
                                       ^
named_parameters.cpp:48:26: error: expected primary-expression before ‘>’ token
   injector.create<example>();
                          ^
named_parameters.cpp:48:28: error: expected primary-expression before ‘)’ token
   injector.create<example>();

Steps to Reproduce the Problem

Compile single file extension/test/injections/named_parameters.cpp

  1. 64bit (OK)
    g++ -m64 named_parameters.cpp -I $PWD/../../include -I $PWD/../../../include -std=c++14
  2. 32bit (FAILS)
    g++ -m32 named_parameters.cpp -I $PWD/../../include -I $PWD/../../../include -std=c++14

Specifications

  • Version: 1.1.0
  • Platform: Ubuntu 16.04.6 LTS 64bit
  • g++ version 5.5.0
@thorsten-klein
Copy link
Author

thorsten-klein commented Oct 24, 2019

Update:
When using g++ version 6.2.0 there are even more errors:

In file included from named_parameters.cpp:11:0:
/home/default/work/di/extension/include/boost/di/extension/injections/named_parameters.hpp: In instantiation of ‘struct boost::di::v1_1_0::extension::parse<example::boost_di_inject__, int, 2>’:
/home/default/work/di/extension/include/boost/di/extension/injections/named_parameters.hpp:97:69:   required from ‘struct boost::di::v1_1_0::extension::args_impl<example::boost_di_inject__, boost::di::v1_1_0::aux::index_sequence<0, 1, 2>, int, std::unique_ptr<interface, std::default_delete<interface> >, int>’
/home/default/work/di/extension/include/boost/di/extension/injections/named_parameters.hpp:105:97:   required from ‘struct boost::di::v1_1_0::extension::args__<true, example::boost_di_inject__, int, std::unique_ptr<interface, std::default_delete<interface> >, int>’
/home/default/work/di/extension/include/boost/di/extension/injections/named_parameters.hpp:115:69:   required from ‘struct boost::di::v1_1_0::extension::args<example::boost_di_inject__ (*)(int, std::unique_ptr<interface>, int)>’
/home/default/work/di/extension/include/boost/di/extension/injections/named_parameters.hpp:124:38:   required by substitution of ‘template<class T> using args_t = typename boost::di::v1_1_0::extension::args::type [with T = example::boost_di_inject__ (*)(int, std::unique_ptr<interface>, int)]’
named_parameters.cpp:29:3:   required from here
/home/default/work/di/extension/include/boost/di/extension/injections/named_parameters.hpp:89:80:   in constexpr expansion of ‘boost::di::v1_1_0::extension::const_hash((((const char*)example::boost_di_inject__::str) + ((sizetype)boost::di::v1_1_0::extension::parse<example::boost_di_inject__, int, 2>::name.boost::di::v1_1_0::extension::pair::begin)), ((long int)boost::di::v1_1_0::extension::parse<example::boost_di_inject__, int, 2>::name.boost::di::v1_1_0::extension::pair::end), 0l)’
/home/default/work/di/extension/include/boost/di/extension/injections/named_parameters.hpp:56:71:   in constexpr expansion of ‘boost::di::v1_1_0::extension::const_hash((input + 1u), m, (i + 1l))’
/home/default/work/di/extension/include/boost/di/extension/injections/named_parameters.hpp:56:71:   in constexpr expansion of ‘boost::di::v1_1_0::extension::const_hash((input + 1u), m, (i + 1l))’
/home/default/work/di/extension/include/boost/di/extension/injections/named_parameters.hpp:56:71:   in constexpr expansion of ‘boost::di::v1_1_0::extension::const_hash((input + 1u), m, (i + 1l))’
/home/default/work/di/extension/include/boost/di/extension/injections/named_parameters.hpp:56:71:   in constexpr expansion of ‘boost::di::v1_1_0::extension::const_hash((input + 1u), m, (i + 1l))’
/home/default/work/di/extension/include/boost/di/extension/injections/named_parameters.hpp:89:120: error: overflow in constant expression [-fpermissive]
                                   named<aux::integral_constant<long, const_hash(&T::str[name.begin], name.end)>, TArg>>;
                                                                                                                        ^
/home/default/work/di/extension/include/boost/di/extension/injections/named_parameters.hpp:89:120: error: overflow in constant expression [-fpermissive]
/home/default/work/di/extension/include/boost/di/extension/injections/named_parameters.hpp:89:120: note: in template argument for type ‘long int’ 
/home/default/work/di/extension/include/boost/di/extension/injections/named_parameters.hpp: In instantiation of ‘constexpr auto boost::di::v1_1_0::extension::operator""_s() [with T = char; T ...Chars = {'m', 'y', '_', 'v', 'a', 'l', 'u', 'e'}]’:
named_parameters.cpp:44:27:   required from here
/home/default/work/di/extension/include/boost/di/extension/injections/named_parameters.hpp:52:49:   in constexpr expansion of ‘boost::di::v1_1_0::extension::const_hash<'m', {'y', '_', 'v', 'a', 'l', 'u', 'e'}>(boost::di::v1_1_0::extension::chars<'m', 'y', '_', 'v', 'a', 'l', 'u', 'e'>{}, ((long int)(8u + 1u)), 0l)’
/home/default/work/di/extension/include/boost/di/extension/injections/named_parameters.hpp:61:61:   in constexpr expansion of ‘boost::di::v1_1_0::extension::const_hash<'y', {'_', 'v', 'a', 'l', 'u', 'e'}>(((const boost::di::v1_1_0::extension::chars<'y', '_', 'v', 'a', 'l', 'u', 'e'>&)(& boost::di::v1_1_0::extension::chars<'y', '_', 'v', 'a', 'l', 'u', 'e'>{})), m, (i + 1l))’
/home/default/work/di/extension/include/boost/di/extension/injections/named_parameters.hpp:61:61:   in constexpr expansion of ‘boost::di::v1_1_0::extension::const_hash<'_', {'v', 'a', 'l', 'u', 'e'}>(((const boost::di::v1_1_0::extension::chars<'_', 'v', 'a', 'l', 'u', 'e'>&)(& boost::di::v1_1_0::extension::chars<'_', 'v', 'a', 'l', 'u', 'e'>{})), m, (i + 1l))’
/home/default/work/di/extension/include/boost/di/extension/injections/named_parameters.hpp:61:61:   in constexpr expansion of ‘boost::di::v1_1_0::extension::const_hash<'v', {'a', 'l', 'u', 'e'}>(((const boost::di::v1_1_0::extension::chars<'v', 'a', 'l', 'u', 'e'>&)(& boost::di::v1_1_0::extension::chars<'v', 'a', 'l', 'u', 'e'>{})), m, (i + 1l))’
/home/default/work/di/extension/include/boost/di/extension/injections/named_parameters.hpp:61:61:   in constexpr expansion of ‘boost::di::v1_1_0::extension::const_hash<'a', {'l', 'u', 'e'}>(((const boost::di::v1_1_0::extension::chars<'a', 'l', 'u', 'e'>&)(& boost::di::v1_1_0::extension::chars<'a', 'l', 'u', 'e'>{})), m, (i + 1l))’
/home/default/work/di/extension/include/boost/di/extension/injections/named_parameters.hpp:52:92: error: overflow in constant expression [-fpermissive]
   return aux::integral_constant<long, const_hash(chars<Chars...>{}, sizeof...(Chars) + 1)>{};
                                                                                            ^
/home/default/work/di/extension/include/boost/di/extension/injections/named_parameters.hpp:52:92: error: overflow in constant expression [-fpermissive]
/home/default/work/di/extension/include/boost/di/extension/injections/named_parameters.hpp:52:92: note: in template argument for type ‘long int’ 
named_parameters.cpp: In function ‘int main()’:
named_parameters.cpp:44:39: error: invalid use of void expression
     , di::bind<int>.named("my_value"_s).to(87)
                                       ^
named_parameters.cpp:48:26: error: expected primary-expression before ‘>’ token
   injector.create<example>();
                          ^
named_parameters.cpp:48:28: error: expected primary-expression before ‘)’ token
   injector.create<example>();
                            ^

@nine nine mentioned this issue Apr 12, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant