Jinja2Cpp: Strange "Incomplete type" error
I got this error when trying to compile my code using g++ on my Bionic Beaver VM (I decided I’ll try to compile the code directly on there and then put the executable into the Dockerfile):
In file included from /usr/include/c++/7/bits/stl_algobase.h:64:0,
from /usr/include/c++/7/bits/char_traits.h:39,
from /usr/include/c++/7/string:40,
from /usr/local/boost_1_68_0/boost/utility/string_view_fwd.hpp:21,
from /usr/local/boost_1_68_0/boost/utility/string_view.hpp:22,
from /usr/local/boost_1_68_0/boost/beast/core/string.hpp:15,
from /usr/local/boost_1_68_0/boost/beast/core/file_base.hpp:14,
from /usr/local/boost_1_68_0/boost/beast/core/type_traits.hpp:14,
from /usr/local/boost_1_68_0/boost/beast/core/bind_handler.hpp:14,
from /usr/local/boost_1_68_0/boost/beast/core.hpp:15,
from currency_converter.cpp:17:
/usr/include/c++/7/bits/stl_pair.h: In instantiation of ‘struct std::pair<const std::__cxx11::basic_string<char>, jinja2::Value>’:
/usr/include/c++/7/ext/aligned_buffer.h:85:34: required from ‘struct __gnu_cxx::__aligned_buffer<std::pair<const std::__cxx11::basic_string<char>, jinja2::Value> >’
/usr/include/c++/7/bits/hashtable_policy.h:248:43: required from ‘struct std::__detail::_Hash_node_value_base<std::pair<const std::__cxx11::basic_string<char>, jinja2::Value> >’
/usr/include/c++/7/bits/hashtable_policy.h:279:12: required from ‘struct std::__detail::_Hash_node<std::pair<const std::__cxx11::basic_string<char>, jinja2::Value>, true>’
/usr/include/c++/7/bits/hashtable_policy.h:2007:60: required from ‘struct std::__detail::_Hashtable_alloc<std::allocator<std::__detail::_Hash_node<std::pair<const std::__cxx11::basic_string<char>, jinja2::Value>, true> > >’
/usr/include/c++/7/bits/hashtable.h:173:11: required from ‘class std::_Hashtable<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, jinja2::Value>, std::allocator<std::pair<const std::__cxx11::basic_string<char>, jinja2::Value> >, std::__detail::_Select1st, std::equal_to<std::__cxx11::basic_string<char> >, std::hash<std::__cxx11::basic_string<char> >, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<true, false, true> >’
/usr/include/c++/7/bits/unordered_map.h:104:18: [ skipping 8 instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]
/usr/include/c++/7/type_traits:1129:12: required from ‘struct std::is_constructible<nonstd::vptr::value_ptr<std::unordered_map<std::__cxx11::basic_string<char>, jinja2::Value>, nonstd::vptr::detail::default_clone<std::unordered_map<std::__cxx11::basic_string<char>, jinja2::Value> >, std::default_delete<std::unordered_map<std::__cxx11::basic_string<char>, jinja2::Value> > >, const nonstd::vptr::value_ptr<std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, jinja2::Value, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, jinja2::Value> > >, nonstd::vptr::detail::default_clone<std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, jinja2::Value, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, jinja2::Value> > > >, std::default_delete<std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, jinja2::Value, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, jinja2::Value> > > > >&>’
/usr/include/c++/7/type_traits:1141:12: required from ‘struct std::__is_copy_constructible_impl<nonstd::vptr::value_ptr<std::unordered_map<std::__cxx11::basic_string<char>, jinja2::Value>, nonstd::vptr::detail::default_clone<std::unordered_map<std::__cxx11::basic_string<char>, jinja2::Value> >, std::default_delete<std::unordered_map<std::__cxx11::basic_string<char>, jinja2::Value> > >, true>’
/usr/include/c++/7/type_traits:1147:12: required from ‘struct std::is_copy_constructible<nonstd::vptr::value_ptr<std::unordered_map<std::__cxx11::basic_string<char>, jinja2::Value>, nonstd::vptr::detail::default_clone<std::unordered_map<std::__cxx11::basic_string<char>, jinja2::Value> >, std::default_delete<std::unordered_map<std::__cxx11::basic_string<char>, jinja2::Value> > > >’
/usr/include/c++/7/type_traits:2977:25: required from ‘constexpr const bool std::is_copy_constructible_v<nonstd::vptr::value_ptr<std::unordered_map<std::__cxx11::basic_string<char>, jinja2::Value>, nonstd::vptr::detail::default_clone<std::unordered_map<std::__cxx11::basic_string<char>, jinja2::Value> >, std::default_delete<std::unordered_map<std::__cxx11::basic_string<char>, jinja2::Value> > > >’
/usr/include/c++/7/variant:890:3: required from ‘class std::variant<jinja2::EmptyValue, bool, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >, long int, double, nonstd::vptr::value_ptr<std::vector<jinja2::Value, std::allocator<jinja2::Value> >, nonstd::vptr::detail::default_clone<std::vector<jinja2::Value, std::allocator<jinja2::Value> > >, std::default_delete<std::vector<jinja2::Value, std::allocator<jinja2::Value> > > >, nonstd::vptr::value_ptr<std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, jinja2::Value, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, jinja2::Value> > >, nonstd::vptr::detail::default_clone<std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, jinja2::Value, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, jinja2::Value> > > >, std::default_delete<std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, jinja2::Value, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, jinja2::Value> > > > >, jinja2::GenericList, jinja2::GenericMap, std::function<jinja2::Value(const jinja2::FunctionCallParams&)> >’
/usr/local/Jinja2Cpp/include/jinja2cpp/value.h:190:15: required from here
/usr/include/c++/7/bits/stl_pair.h:204:11: error: ‘std::pair<_T1, _T2>::second’ has incomplete type
_T2 second; /// @c second is a copy of the second object
Should I just add the backtrace limit like it says, or can this be fixed in a different way? It seems to be an error from the standard library files, which is strange to me.
This is the compilation command I used:
g++ -std=c++17 -Wall -pedantic -I /usr/local/Jinja2Cpp/include -I /usr/local/Jinja2Cpp/thirdparty/nonstd/value-ptr-lite/include -I /usr/local/Jinja2Cpp/thirdparty/nonstd/variant-light/include -I /usr/local/Jinja2Cpp/thirdparty/nonstd/expected-light/include -I /usr/local/boost_1_68_0/ -I /usr/local/json/single_include/ -L /usr/local/Jinja2Cpp/build/ -llibjinja2cpp.* -L /usr/local/boost_1_68_0/stage/lib/ -llibboost_system.* currency_converter.cpp -o currency_converter
About this issue
- Original URL
- State: closed
- Created 6 years ago
- Comments: 57 (2 by maintainers)
So, forced variant-lite + value_ptr-lite (and some changes in the
value.h) is a appropriate way of this bug fixing.