Skip to content

Disable conversion nullptr to 0

Grigory Latyshev requested to merge thegriglat/openmw:unity_fix into master

Dear all,

I have found that changes in lines 75-76 -> 73 (695cd5bb) causes compilation errors with OPENMW_UNITY_BUILD enabled.

-    if (sVampireMapping.find(thisCombination) == sVampireMapping.end())
-        sVampireMapping[thisCombination] = nullptr;
+    sVampireMapping.emplace(thisCombination, nullptr);

System: Debian 9, x86_64, openmw@master

Errors:

[42/43] Building CXX object apps/openmw/CMakeFiles/openmw.dir/ub_mwrender.cpp.o
FAILED: apps/openmw/CMakeFiles/openmw.dir/ub_mwrender.cpp.o 
/usr/bin/ccache  c++  -DBOOST_NO_CXX11_SCOPED_ENUMS=ON -D__STDC_CONSTANT_MACROS -isystem /usr/local/include -I/home/greg/Morrowind/openmw/. -isystem /usr/include/SDL2 -isystem /usr/include/MYGUI -isystem /usr/include/AL -isystem /usr/local/include/bullet -I/usr/include/x86_64-linux-gnu -I/home/greg/Morrowind/openmw/extern/recastnavigation/DebugUtils/Include -I/home/greg/Morrowind/openmw/extern/recastnavigation/Recast/Include -I/home/greg/Morrowind/openmw/extern/recastnavigation/Detour/Include -I/home/greg/Morrowind/openmw/extern/recastnavigation/DetourTileCache/Include -Wall -Wextra -Wundef -Wno-unused-parameter -std=c++14 -pedantic -Wno-long-long -Wno-unused-but-set-parameter -Os -DNDEBUG -march=native -mtune=native   -std=gnu++14 -MD -MT apps/openmw/CMakeFiles/openmw.dir/ub_mwrender.cpp.o -MF apps/openmw/CMakeFiles/openmw.dir/ub_mwrender.cpp.o.d -o apps/openmw/CMakeFiles/openmw.dir/ub_mwrender.cpp.o -c /home/greg/Morrowind/openmw-build-ninja/apps/openmw/ub_mwrender.cpp
In file included from /usr/include/x86_64-linux-gnu/c++/6/bits/c++allocator.h:33:0,
                 from /usr/include/c++/6/bits/allocator.h:46,
                 from /usr/include/c++/6/bits/stl_tree.h:64,
                 from /usr/include/c++/6/map:60,
                 from /home/greg/Morrowind/openmw/apps/openmw/mwrender/objects.hpp:4,
                 from /home/greg/Morrowind/openmw/apps/openmw/mwrender/objects.cpp:1,
                 from /home/greg/Morrowind/openmw-build-ninja/apps/openmw/ub_mwrender.cpp:2:
/usr/include/c++/6/ext/new_allocator.h: In instantiation of ‘void __gnu_cxx::new_allocator<_Tp>::construct(_Up*, _Args&& ...) [with _Up = std::pair<const std::pair<std::__cxx11::basic_string<char>, int>, const ESM::BodyPart*>; _Args = {std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int>&, int}; _Tp = std::_Rb_tree_node<std::pair<const std::pair<std::__cxx11::basic_string<char>, int>, const ESM::BodyPart*> >]’:
/usr/include/c++/6/bits/alloc_traits.h:475:4:   required from ‘static void std::allocator_traits<std::allocator<_Tp1> >::construct(std::allocator_traits<std::allocator<_Tp1> >::allocator_type&, _Up*, _Args&& ...) [with _Up = std::pair<const std::pair<std::__cxx11::basic_string<char>, int>, const ESM::BodyPart*>; _Args = {std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int>&, int}; _Tp = std::_Rb_tree_node<std::pair<const std::pair<std::__cxx11::basic_string<char>, int>, const ESM::BodyPart*> >; std::allocator_traits<std::allocator<_Tp1> >::allocator_type = std::allocator<std::_Rb_tree_node<std::pair<const std::pair<std::__cxx11::basic_string<char>, int>, const ESM::BodyPart*> > >]’
/usr/include/c++/6/bits/stl_tree.h:543:32:   required from ‘void std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_construct_node(std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_Link_type, _Args&& ...) [with _Args = {std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int>&, int}; _Key = std::pair<std::__cxx11::basic_string<char>, int>; _Val = std::pair<const std::pair<std::__cxx11::basic_string<char>, int>, const ESM::BodyPart*>; _KeyOfValue = std::_Select1st<std::pair<const std::pair<std::__cxx11::basic_string<char>, int>, const ESM::BodyPart*> >; _Compare = std::less<std::pair<std::__cxx11::basic_string<char>, int> >; _Alloc = std::allocator<std::pair<const std::pair<std::__cxx11::basic_string<char>, int>, const ESM::BodyPart*> >; std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_Link_type = std::_Rb_tree_node<std::pair<const std::pair<std::__cxx11::basic_string<char>, int>, const ESM::BodyPart*> >*]’
/usr/include/c++/6/bits/stl_tree.h:560:4:   required from ‘std::_Rb_tree_node<_Val>* std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_create_node(_Args&& ...) [with _Args = {std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int>&, int}; _Key = std::pair<std::__cxx11::basic_string<char>, int>; _Val = std::pair<const std::pair<std::__cxx11::basic_string<char>, int>, const ESM::BodyPart*>; _KeyOfValue = std::_Select1st<std::pair<const std::pair<std::__cxx11::basic_string<char>, int>, const ESM::BodyPart*> >; _Compare = std::less<std::pair<std::__cxx11::basic_string<char>, int> >; _Alloc = std::allocator<std::pair<const std::pair<std::__cxx11::basic_string<char>, int>, const ESM::BodyPart*> >; std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_Link_type = std::_Rb_tree_node<std::pair<const std::pair<std::__cxx11::basic_string<char>, int>, const ESM::BodyPart*> >*]’
/usr/include/c++/6/bits/stl_tree.h:2149:64:   required from ‘std::pair<std::_Rb_tree_iterator<_Val>, bool> std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_emplace_unique(_Args&& ...) [with _Args = {std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int>&, int}; _Key = std::pair<std::__cxx11::basic_string<char>, int>; _Val = std::pair<const std::pair<std::__cxx11::basic_string<char>, int>, const ESM::BodyPart*>; _KeyOfValue = std::_Select1st<std::pair<const std::pair<std::__cxx11::basic_string<char>, int>, const ESM::BodyPart*> >; _Compare = std::less<std::pair<std::__cxx11::basic_string<char>, int> >; _Alloc = std::allocator<std::pair<const std::pair<std::__cxx11::basic_string<char>, int>, const ESM::BodyPart*> >]’
/usr/include/c++/6/bits/stl_map.h:559:64:   required from ‘std::pair<typename std::_Rb_tree<_Key, std::pair<const _Key, _Tp>, std::_Select1st<std::pair<const _Key, _Tp> >, _Compare, typename __gnu_cxx::__alloc_traits<_Alloc>::rebind<std::pair<const _Key, _Tp> >::other>::iterator, bool> std::map<_Key, _Tp, _Compare, _Alloc>::emplace(_Args&& ...) [with _Args = {std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int>&, int}; _Key = std::pair<std::__cxx11::basic_string<char>, int>; _Tp = const ESM::BodyPart*; _Compare = std::less<std::pair<std::__cxx11::basic_string<char>, int> >; _Alloc = std::allocator<std::pair<const std::pair<std::__cxx11::basic_string<char>, int>, const ESM::BodyPart*> >; typename std::_Rb_tree<_Key, std::pair<const _Key, _Tp>, std::_Select1st<std::pair<const _Key, _Tp> >, _Compare, typename __gnu_cxx::__alloc_traits<_Alloc>::rebind<std::pair<const _Key, _Tp> >::other>::iterator = std::_Rb_tree_iterator<std::pair<const std::pair<std::__cxx11::basic_string<char>, int>, const ESM::BodyPart*> >]’
/home/greg/Morrowind/openmw/apps/openmw/mwrender/npcanimation.cpp:73:53:   required from here
/usr/include/c++/6/ext/new_allocator.h:120:4: error: no matching function for call to ‘std::pair<const std::pair<std::__cxx11::basic_string<char>, int>, const ESM::BodyPart*>::pair(std::pair<std::__cxx11::basic_string<char>, int>&, int)’
  { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/6/bits/stl_algobase.h:64:0,
                 from /usr/include/c++/6/bits/stl_tree.h:63,
                 from /usr/include/c++/6/map:60,
                 from /home/greg/Morrowind/openmw/apps/openmw/mwrender/objects.hpp:4,
                 from /home/greg/Morrowind/openmw/apps/openmw/mwrender/objects.cpp:1,
                 from /home/greg/Morrowind/openmw-build-ninja/apps/openmw/ub_mwrender.cpp:2:
/usr/include/c++/6/bits/stl_pair.h:427:9: note: candidate: template<class ... _Args1, long unsigned int ..._Indexes1, class ... _Args2, long unsigned int ..._Indexes2> std::pair<_T1, _T2>::pair(std::tuple<_Args1 ...>&, std::tuple<_Args2 ...>&, std::_Index_tuple<_Indexes1 ...>, std::_Index_tuple<_Indexes2 ...>)
         pair(tuple<_Args1...>&, tuple<_Args2...>&,
         ^~~~
/usr/include/c++/6/bits/stl_pair.h:427:9: note:   template argument deduction/substitution failed:
In file included from /usr/include/x86_64-linux-gnu/c++/6/bits/c++allocator.h:33:0,
                 from /usr/include/c++/6/bits/allocator.h:46,
                 from /usr/include/c++/6/bits/stl_tree.h:64,
                 from /usr/include/c++/6/map:60,
                 from /home/greg/Morrowind/openmw/apps/openmw/mwrender/objects.hpp:4,
                 from /home/greg/Morrowind/openmw/apps/openmw/mwrender/objects.cpp:1,
                 from /home/greg/Morrowind/openmw-build-ninja/apps/openmw/ub_mwrender.cpp:2:
/usr/include/c++/6/ext/new_allocator.h:120:4: note:   ‘std::pair<std::__cxx11::basic_string<char>, int>’ is not derived from ‘std::tuple<_Args1 ...>’
  { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/6/bits/stl_algobase.h:64:0,
                 from /usr/include/c++/6/bits/stl_tree.h:63,
                 from /usr/include/c++/6/map:60,
                 from /home/greg/Morrowind/openmw/apps/openmw/mwrender/objects.hpp:4,
                 from /home/greg/Morrowind/openmw/apps/openmw/mwrender/objects.cpp:1,
                 from /home/greg/Morrowind/openmw-build-ninja/apps/openmw/ub_mwrender.cpp:2:
/usr/include/c++/6/bits/stl_pair.h:360:9: note: candidate: template<class ... _Args1, class ... _Args2> std::pair<_T1, _T2>::pair(std::piecewise_construct_t, std::tuple<_Args1 ...>, std::tuple<_Args2 ...>)
         pair(piecewise_construct_t, tuple<_Args1...>, tuple<_Args2...>);
         ^~~~
/usr/include/c++/6/bits/stl_pair.h:360:9: note:   template argument deduction/substitution failed:
In file included from /usr/include/x86_64-linux-gnu/c++/6/bits/c++allocator.h:33:0,
                 from /usr/include/c++/6/bits/allocator.h:46,
                 from /usr/include/c++/6/bits/stl_tree.h:64,
                 from /usr/include/c++/6/map:60,
                 from /home/greg/Morrowind/openmw/apps/openmw/mwrender/objects.hpp:4,
                 from /home/greg/Morrowind/openmw/apps/openmw/mwrender/objects.cpp:1,
                 from /home/greg/Morrowind/openmw-build-ninja/apps/openmw/ub_mwrender.cpp:2:
/usr/include/c++/6/ext/new_allocator.h:120:4: note:   mismatched types ‘std::tuple<_Args1 ...>’ and ‘int’
  { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/6/bits/stl_algobase.h:64:0,
                 from /usr/include/c++/6/bits/stl_tree.h:63,
                 from /usr/include/c++/6/map:60,
                 from /home/greg/Morrowind/openmw/apps/openmw/mwrender/objects.hpp:4,
                 from /home/greg/Morrowind/openmw/apps/openmw/mwrender/objects.cpp:1,
                 from /home/greg/Morrowind/openmw-build-ninja/apps/openmw/ub_mwrender.cpp:2:
/usr/include/c++/6/bits/stl_pair.h:355:21: note: candidate: template<class _U1, class _U2, typename std::enable_if<(std::_PCC<((! std::is_same<const std::pair<std::__cxx11::basic_string<char>, int>, _U1>::value) || (! std::is_same<const ESM::BodyPart*, _U2>::value)), const std::pair<std::__cxx11::basic_string<char>, int>, const ESM::BodyPart*>::_MoveConstructiblePair<_U1, _U2>() && (! std::_PCC<((! std::is_same<const std::pair<std::__cxx11::basic_string<char>, int>, _U1>::value) || (! std::is_same<const ESM::BodyPart*, _U2>::value)), const std::pair<std::__cxx11::basic_string<char>, int>, const ESM::BodyPart*>::_ImplicitlyMoveConvertiblePair<_U1, _U2>())), bool>::type <anonymous> > constexpr std::pair<_T1, _T2>::pair(std::pair<_U1, _U2>&&)
  explicit constexpr pair(pair<_U1, _U2>&& __p)
                     ^~~~
/usr/include/c++/6/bits/stl_pair.h:355:21: note:   template argument deduction/substitution failed:
In file included from /usr/include/x86_64-linux-gnu/c++/6/bits/c++allocator.h:33:0,
                 from /usr/include/c++/6/bits/allocator.h:46,
                 from /usr/include/c++/6/bits/stl_tree.h:64,
                 from /usr/include/c++/6/map:60,
                 from /home/greg/Morrowind/openmw/apps/openmw/mwrender/objects.hpp:4,
                 from /home/greg/Morrowind/openmw/apps/openmw/mwrender/objects.cpp:1,
                 from /home/greg/Morrowind/openmw-build-ninja/apps/openmw/ub_mwrender.cpp:2:
/usr/include/c++/6/ext/new_allocator.h:120:4: note:   candidate expects 1 argument, 2 provided
  { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/6/bits/stl_algobase.h:64:0,
                 from /usr/include/c++/6/bits/stl_tree.h:63,
                 from /usr/include/c++/6/map:60,
                 from /home/greg/Morrowind/openmw/apps/openmw/mwrender/objects.hpp:4,
                 from /home/greg/Morrowind/openmw/apps/openmw/mwrender/objects.cpp:1,
                 from /home/greg/Morrowind/openmw-build-ninja/apps/openmw/ub_mwrender.cpp:2:
/usr/include/c++/6/bits/stl_pair.h:345:12: note: candidate: template<class _U1, class _U2, typename std::enable_if<(std::_PCC<((! std::is_same<const std::pair<std::__cxx11::basic_string<char>, int>, _U1>::value) || (! std::is_same<const ESM::BodyPart*, _U2>::value)), const std::pair<std::__cxx11::basic_string<char>, int>, const ESM::BodyPart*>::_MoveConstructiblePair<_U1, _U2>() && std::_PCC<((! std::is_same<const std::pair<std::__cxx11::basic_string<char>, int>, _U1>::value) || (! std::is_same<const ESM::BodyPart*, _U2>::value)), const std::pair<std::__cxx11::basic_string<char>, int>, const ESM::BodyPart*>::_ImplicitlyMoveConvertiblePair<_U1, _U2>()), bool>::type <anonymous> > constexpr std::pair<_T1, _T2>::pair(std::pair<_U1, _U2>&&)
  constexpr pair(pair<_U1, _U2>&& __p)
            ^~~~
/usr/include/c++/6/bits/stl_pair.h:345:12: note:   template argument deduction/substitution failed:
In file included from /usr/include/x86_64-linux-gnu/c++/6/bits/c++allocator.h:33:0,
                 from /usr/include/c++/6/bits/allocator.h:46,
                 from /usr/include/c++/6/bits/stl_tree.h:64,
                 from /usr/include/c++/6/map:60,
                 from /home/greg/Morrowind/openmw/apps/openmw/mwrender/objects.hpp:4,
                 from /home/greg/Morrowind/openmw/apps/openmw/mwrender/objects.cpp:1,
                 from /home/greg/Morrowind/openmw-build-ninja/apps/openmw/ub_mwrender.cpp:2:
/usr/include/c++/6/ext/new_allocator.h:120:4: note:   candidate expects 1 argument, 2 provided
  { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/6/bits/stl_algobase.h:64:0,
                 from /usr/include/c++/6/bits/stl_tree.h:63,
                 from /usr/include/c++/6/map:60,
                 from /home/greg/Morrowind/openmw/apps/openmw/mwrender/objects.hpp:4,
                 from /home/greg/Morrowind/openmw/apps/openmw/mwrender/objects.cpp:1,
                 from /home/greg/Morrowind/openmw-build-ninja/apps/openmw/ub_mwrender.cpp:2:
/usr/include/c++/6/bits/stl_pair.h:335:21: note: candidate: template<class _U1, class _U2, typename std::enable_if<(_MoveConstructiblePair<_U1, _U2>() && (! _ImplicitlyMoveConvertiblePair<_U1, _U2>())), bool>::type <anonymous> > constexpr std::pair<_T1, _T2>::pair(_U1&&, _U2&&)
  explicit constexpr pair(_U1&& __x, _U2&& __y)
                     ^~~~
/usr/include/c++/6/bits/stl_pair.h:335:21: note:   template argument deduction/substitution failed:
/usr/include/c++/6/bits/stl_pair.h:334:38: error: no type named ‘type’ in ‘struct std::enable_if<false, bool>’
                          bool>::type=false>
                                      ^~~~~
/usr/include/c++/6/bits/stl_pair.h:334:38: note: invalid template non-type parameter
/usr/include/c++/6/bits/stl_pair.h:326:12: note: candidate: template<class _U1, class _U2, typename std::enable_if<(_MoveConstructiblePair<_U1, _U2>() && _ImplicitlyMoveConvertiblePair<_U1, _U2>()), bool>::type <anonymous> > constexpr std::pair<_T1, _T2>::pair(_U1&&, _U2&&)
  constexpr pair(_U1&& __x, _U2&& __y)
            ^~~~
/usr/include/c++/6/bits/stl_pair.h:326:12: note:   template argument deduction/substitution failed:
/usr/include/c++/6/bits/stl_pair.h:325:38: error: no type named ‘type’ in ‘struct std::enable_if<false, bool>’
                          bool>::type=true>
                                      ^~~~
/usr/include/c++/6/bits/stl_pair.h:325:38: note: invalid template non-type parameter
/usr/include/c++/6/bits/stl_pair.h:317:17: note: candidate: template<class _U2, typename std::enable_if<_CopyMovePair<false, const std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int>, _U2>(), bool>::type <anonymous> > std::pair<_T1, _T2>::pair(const _T1&, _U2&&)
        explicit pair(const _T1& __x, _U2&& __y)
                 ^~~~
/usr/include/c++/6/bits/stl_pair.h:317:17: note:   template argument deduction/substitution failed:
/usr/include/c++/6/bits/stl_pair.h:316:38: error: no type named ‘type’ in ‘struct std::enable_if<false, bool>’
                          bool>::type=false>
                                      ^~~~~
/usr/include/c++/6/bits/stl_pair.h:316:38: note: invalid template non-type parameter
/usr/include/c++/6/bits/stl_pair.h:310:18: note: candidate: template<class _U2, typename std::enable_if<_CopyMovePair<true, const std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int>, _U2>(), bool>::type <anonymous> > constexpr std::pair<_T1, _T2>::pair(const _T1&, _U2&&)
        constexpr pair(const _T1& __x, _U2&& __y)
                  ^~~~
/usr/include/c++/6/bits/stl_pair.h:310:18: note:   template argument deduction/substitution failed:
/usr/include/c++/6/bits/stl_pair.h:309:38: error: no type named ‘type’ in ‘struct std::enable_if<false, bool>’
                          bool>::type=true>
                                      ^~~~
/usr/include/c++/6/bits/stl_pair.h:309:38: note: invalid template non-type parameter
/usr/include/c++/6/bits/stl_pair.h:303:27: note: candidate: template<class _U1, typename std::enable_if<_MoveCopyPair<false, _U1, const ESM::BodyPart*>(), bool>::type <anonymous> > constexpr std::pair<_T1, _T2>::pair(_U1&&, const _T2&)
        explicit constexpr pair(_U1&& __x, const _T2& __y)
                           ^~~~
/usr/include/c++/6/bits/stl_pair.h:303:27: note:   template argument deduction/substitution failed:
In file included from /usr/include/x86_64-linux-gnu/c++/6/bits/c++allocator.h:33:0,
                 from /usr/include/c++/6/bits/allocator.h:46,
                 from /usr/include/c++/6/bits/stl_tree.h:64,
                 from /usr/include/c++/6/map:60,
                 from /home/greg/Morrowind/openmw/apps/openmw/mwrender/objects.hpp:4,
                 from /home/greg/Morrowind/openmw/apps/openmw/mwrender/objects.cpp:1,
                 from /home/greg/Morrowind/openmw-build-ninja/apps/openmw/ub_mwrender.cpp:2:
/usr/include/c++/6/ext/new_allocator.h:120:4: note:   cannot convert ‘std::forward<int>((* & __args#1))’ (type ‘int’) to type ‘const ESM::BodyPart* const&’
  { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/6/bits/stl_algobase.h:64:0,
                 from /usr/include/c++/6/bits/stl_tree.h:63,
                 from /usr/include/c++/6/map:60,
                 from /home/greg/Morrowind/openmw/apps/openmw/mwrender/objects.hpp:4,
                 from /home/greg/Morrowind/openmw/apps/openmw/mwrender/objects.cpp:1,
                 from /home/greg/Morrowind/openmw-build-ninja/apps/openmw/ub_mwrender.cpp:2:
/usr/include/c++/6/bits/stl_pair.h:296:18: note: candidate: template<class _U1, typename std::enable_if<_MoveCopyPair<true, _U1, const ESM::BodyPart*>(), bool>::type <anonymous> > constexpr std::pair<_T1, _T2>::pair(_U1&&, const _T2&)
        constexpr pair(_U1&& __x, const _T2& __y)
                  ^~~~
/usr/include/c++/6/bits/stl_pair.h:296:18: note:   template argument deduction/substitution failed:
In file included from /usr/include/x86_64-linux-gnu/c++/6/bits/c++allocator.h:33:0,
                 from /usr/include/c++/6/bits/allocator.h:46,
                 from /usr/include/c++/6/bits/stl_tree.h:64,
                 from /usr/include/c++/6/map:60,
                 from /home/greg/Morrowind/openmw/apps/openmw/mwrender/objects.hpp:4,
                 from /home/greg/Morrowind/openmw/apps/openmw/mwrender/objects.cpp:1,
                 from /home/greg/Morrowind/openmw-build-ninja/apps/openmw/ub_mwrender.cpp:2:
/usr/include/c++/6/ext/new_allocator.h:120:4: note:   cannot convert ‘std::forward<int>((* & __args#1))’ (type ‘int’) to type ‘const ESM::BodyPart* const&’
  { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/6/bits/stl_algobase.h:64:0,
                 from /usr/include/c++/6/bits/stl_tree.h:63,
                 from /usr/include/c++/6/map:60,
                 from /home/greg/Morrowind/openmw/apps/openmw/mwrender/objects.hpp:4,
                 from /home/greg/Morrowind/openmw/apps/openmw/mwrender/objects.cpp:1,
                 from /home/greg/Morrowind/openmw-build-ninja/apps/openmw/ub_mwrender.cpp:2:
/usr/include/c++/6/bits/stl_pair.h:289:17: note: candidate: constexpr std::pair<_T1, _T2>::pair(std::pair<_T1, _T2>&&) [with _T1 = const std::pair<std::__cxx11::basic_string<char>, int>; _T2 = const ESM::BodyPart*]
       constexpr pair(pair&&) = default;
                 ^~~~
/usr/include/c++/6/bits/stl_pair.h:289:17: note:   candidate expects 1 argument, 2 provided
/usr/include/c++/6/bits/stl_pair.h:288:17: note: candidate: constexpr std::pair<_T1, _T2>::pair(const std::pair<_T1, _T2>&) [with _T1 = const std::pair<std::__cxx11::basic_string<char>, int>; _T2 = const ESM::BodyPart*]
       constexpr pair(const pair&) = default;
                 ^~~~
/usr/include/c++/6/bits/stl_pair.h:288:17: note:   candidate expects 1 argument, 2 provided
/usr/include/c++/6/bits/stl_pair.h:285:21: note: candidate: template<class _U1, class _U2, typename std::enable_if<(std::_PCC<((! std::is_same<const std::pair<std::__cxx11::basic_string<char>, int>, _U1>::value) || (! std::is_same<const ESM::BodyPart*, _U2>::value)), const std::pair<std::__cxx11::basic_string<char>, int>, const ESM::BodyPart*>::_ConstructiblePair<_U1, _U2>() && (! std::_PCC<((! std::is_same<const std::pair<std::__cxx11::basic_string<char>, int>, _U1>::value) || (! std::is_same<const ESM::BodyPart*, _U2>::value)), const std::pair<std::__cxx11::basic_string<char>, int>, const ESM::BodyPart*>::_ImplicitlyConvertiblePair<_U1, _U2>())), bool>::type <anonymous> > constexpr std::pair<_T1, _T2>::pair(const std::pair<_U1, _U2>&)
  explicit constexpr pair(const pair<_U1, _U2>& __p)
                     ^~~~
/usr/include/c++/6/bits/stl_pair.h:285:21: note:   template argument deduction/substitution failed:
In file included from /usr/include/x86_64-linux-gnu/c++/6/bits/c++allocator.h:33:0,
                 from /usr/include/c++/6/bits/allocator.h:46,
                 from /usr/include/c++/6/bits/stl_tree.h:64,
                 from /usr/include/c++/6/map:60,
                 from /home/greg/Morrowind/openmw/apps/openmw/mwrender/objects.hpp:4,
                 from /home/greg/Morrowind/openmw/apps/openmw/mwrender/objects.cpp:1,
                 from /home/greg/Morrowind/openmw-build-ninja/apps/openmw/ub_mwrender.cpp:2:
/usr/include/c++/6/ext/new_allocator.h:120:4: note:   candidate expects 1 argument, 2 provided
  { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/6/bits/stl_algobase.h:64:0,
                 from /usr/include/c++/6/bits/stl_tree.h:63,
                 from /usr/include/c++/6/map:60,
                 from /home/greg/Morrowind/openmw/apps/openmw/mwrender/objects.hpp:4,
                 from /home/greg/Morrowind/openmw/apps/openmw/mwrender/objects.cpp:1,
                 from /home/greg/Morrowind/openmw-build-ninja/apps/openmw/ub_mwrender.cpp:2:
/usr/include/c++/6/bits/stl_pair.h:276:19: note: candidate: template<class _U1, class _U2, typename std::enable_if<(std::_PCC<((! std::is_same<const std::pair<std::__cxx11::basic_string<char>, int>, _U1>::value) || (! std::is_same<const ESM::BodyPart*, _U2>::value)), const std::pair<std::__cxx11::basic_string<char>, int>, const ESM::BodyPart*>::_ConstructiblePair<_U1, _U2>() && std::_PCC<((! std::is_same<const std::pair<std::__cxx11::basic_string<char>, int>, _U1>::value) || (! std::is_same<const ESM::BodyPart*, _U2>::value)), const std::pair<std::__cxx11::basic_string<char>, int>, const ESM::BodyPart*>::_ImplicitlyConvertiblePair<_U1, _U2>()), bool>::type <anonymous> > constexpr std::pair<_T1, _T2>::pair(const std::pair<_U1, _U2>&)
         constexpr pair(const pair<_U1, _U2>& __p)
                   ^~~~
/usr/include/c++/6/bits/stl_pair.h:276:19: note:   template argument deduction/substitution failed:
In file included from /usr/include/x86_64-linux-gnu/c++/6/bits/c++allocator.h:33:0,
                 from /usr/include/c++/6/bits/allocator.h:46,
                 from /usr/include/c++/6/bits/stl_tree.h:64,
                 from /usr/include/c++/6/map:60,
                 from /home/greg/Morrowind/openmw/apps/openmw/mwrender/objects.hpp:4,
                 from /home/greg/Morrowind/openmw/apps/openmw/mwrender/objects.cpp:1,
                 from /home/greg/Morrowind/openmw-build-ninja/apps/openmw/ub_mwrender.cpp:2:
/usr/include/c++/6/ext/new_allocator.h:120:4: note:   candidate expects 1 argument, 2 provided
  { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/6/bits/stl_algobase.h:64:0,
                 from /usr/include/c++/6/bits/stl_tree.h:63,
                 from /usr/include/c++/6/map:60,
                 from /home/greg/Morrowind/openmw/apps/openmw/mwrender/objects.hpp:4,
                 from /home/greg/Morrowind/openmw/apps/openmw/mwrender/objects.cpp:1,
                 from /home/greg/Morrowind/openmw-build-ninja/apps/openmw/ub_mwrender.cpp:2:
/usr/include/c++/6/bits/stl_pair.h:254:26: note: candidate: template<class _U1, class _U2, typename std::enable_if<(_ConstructiblePair<_U1, _U2>() && (! _ImplicitlyConvertiblePair<_U1, _U2>())), bool>::type <anonymous> > constexpr std::pair<_T1, _T2>::pair(const _T1&, const _T2&)
       explicit constexpr pair(const _T1& __a, const _T2& __b)
                          ^~~~
/usr/include/c++/6/bits/stl_pair.h:254:26: note:   template argument deduction/substitution failed:
In file included from /usr/include/x86_64-linux-gnu/c++/6/bits/c++allocator.h:33:0,
                 from /usr/include/c++/6/bits/allocator.h:46,
                 from /usr/include/c++/6/bits/stl_tree.h:64,
                 from /usr/include/c++/6/map:60,
                 from /home/greg/Morrowind/openmw/apps/openmw/mwrender/objects.hpp:4,
                 from /home/greg/Morrowind/openmw/apps/openmw/mwrender/objects.cpp:1,
                 from /home/greg/Morrowind/openmw-build-ninja/apps/openmw/ub_mwrender.cpp:2:
/usr/include/c++/6/ext/new_allocator.h:120:4: note:   cannot convert ‘std::forward<int>((* & __args#1))’ (type ‘int’) to type ‘const ESM::BodyPart* const&’
  { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/6/bits/stl_algobase.h:64:0,
                 from /usr/include/c++/6/bits/stl_tree.h:63,
                 from /usr/include/c++/6/map:60,
                 from /home/greg/Morrowind/openmw/apps/openmw/mwrender/objects.hpp:4,
                 from /home/greg/Morrowind/openmw/apps/openmw/mwrender/objects.cpp:1,
                 from /home/greg/Morrowind/openmw-build-ninja/apps/openmw/ub_mwrender.cpp:2:
/usr/include/c++/6/bits/stl_pair.h:245:17: note: candidate: template<class _U1, class _U2, typename std::enable_if<(_ConstructiblePair<_U1, _U2>() && _ImplicitlyConvertiblePair<_U1, _U2>()), bool>::type <anonymous> > constexpr std::pair<_T1, _T2>::pair(const _T1&, const _T2&)
       constexpr pair(const _T1& __a, const _T2& __b)
                 ^~~~
/usr/include/c++/6/bits/stl_pair.h:245:17: note:   template argument deduction/substitution failed:
In file included from /usr/include/x86_64-linux-gnu/c++/6/bits/c++allocator.h:33:0,
                 from /usr/include/c++/6/bits/allocator.h:46,
                 from /usr/include/c++/6/bits/stl_tree.h:64,
                 from /usr/include/c++/6/map:60,
                 from /home/greg/Morrowind/openmw/apps/openmw/mwrender/objects.hpp:4,
                 from /home/greg/Morrowind/openmw/apps/openmw/mwrender/objects.cpp:1,
                 from /home/greg/Morrowind/openmw-build-ninja/apps/openmw/ub_mwrender.cpp:2:
/usr/include/c++/6/ext/new_allocator.h:120:4: note:   cannot convert ‘std::forward<int>((* & __args#1))’ (type ‘int’) to type ‘const ESM::BodyPart* const&’
  { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/6/bits/stl_algobase.h:64:0,
                 from /usr/include/c++/6/bits/stl_tree.h:63,
                 from /usr/include/c++/6/map:60,
                 from /home/greg/Morrowind/openmw/apps/openmw/mwrender/objects.hpp:4,
                 from /home/greg/Morrowind/openmw/apps/openmw/mwrender/objects.cpp:1,
                 from /home/greg/Morrowind/openmw-build-ninja/apps/openmw/ub_mwrender.cpp:2:
/usr/include/c++/6/bits/stl_pair.h:227:26: note: candidate: template<class _U1, class _U2, typename std::enable_if<std::__and_<std::is_default_constructible<_Tp>, std::is_default_constructible<_U2>, std::__not_<std::__and_<std::__is_implicitly_default_constructible<_U1>, std::__is_implicitly_default_constructible<_U2> > > >::value, bool>::type <anonymous> > constexpr std::pair<_T1, _T2>::pair()
       explicit constexpr pair()
                          ^~~~
/usr/include/c++/6/bits/stl_pair.h:227:26: note:   template argument deduction/substitution failed:
In file included from /usr/include/x86_64-linux-gnu/c++/6/bits/c++allocator.h:33:0,
                 from /usr/include/c++/6/bits/allocator.h:46,
                 from /usr/include/c++/6/bits/stl_tree.h:64,
                 from /usr/include/c++/6/map:60,
                 from /home/greg/Morrowind/openmw/apps/openmw/mwrender/objects.hpp:4,
                 from /home/greg/Morrowind/openmw/apps/openmw/mwrender/objects.cpp:1,
                 from /home/greg/Morrowind/openmw-build-ninja/apps/openmw/ub_mwrender.cpp:2:
/usr/include/c++/6/ext/new_allocator.h:120:4: note:   candidate expects 0 arguments, 2 provided
  { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/6/bits/stl_algobase.h:64:0,
                 from /usr/include/c++/6/bits/stl_tree.h:63,
                 from /usr/include/c++/6/map:60,
                 from /home/greg/Morrowind/openmw/apps/openmw/mwrender/objects.hpp:4,
                 from /home/greg/Morrowind/openmw/apps/openmw/mwrender/objects.cpp:1,
                 from /home/greg/Morrowind/openmw-build-ninja/apps/openmw/ub_mwrender.cpp:2:
/usr/include/c++/6/bits/stl_pair.h:214:26: note: candidate: template<class _U1, class _U2, typename std::enable_if<std::__and_<std::__is_implicitly_default_constructible<_U1>, std::__is_implicitly_default_constructible<_U2> >::value, bool>::type <anonymous> > constexpr std::pair<_T1, _T2>::pair()
       _GLIBCXX_CONSTEXPR pair()
                          ^~~~
/usr/include/c++/6/bits/stl_pair.h:214:26: note:   template argument deduction/substitution failed:
In file included from /usr/include/x86_64-linux-gnu/c++/6/bits/c++allocator.h:33:0,
                 from /usr/include/c++/6/bits/allocator.h:46,
                 from /usr/include/c++/6/bits/stl_tree.h:64,
                 from /usr/include/c++/6/map:60,
                 from /home/greg/Morrowind/openmw/apps/openmw/mwrender/objects.hpp:4,
                 from /home/greg/Morrowind/openmw/apps/openmw/mwrender/objects.cpp:1,
                 from /home/greg/Morrowind/openmw-build-ninja/apps/openmw/ub_mwrender.cpp:2:
/usr/include/c++/6/ext/new_allocator.h:120:4: note:   candidate expects 0 arguments, 2 provided
  { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

I'm not sure that static_cast<const ESM::BodyPart*> should be used but at least it compiles. Any comments are welcome!

Also, can we add unity build in pipelines (#5084)?

Thanks!

Edited by Grigory Latyshev

Merge request reports