Compiz FTBFS with -std=c++11

Bug #1477654 reported by Stephen M. Webb
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Compiz
Fix Released
High
Stephen M. Webb

Bug Description

Looks like some bad code where an arbitrary pointer is implicitly passed to (and owned by) a boost::shared_ptr and GCC in -std=c++11 mode doesn't allow that.

/tmp/buildd/compiz-0.9.12.1+15.10.20150627.1/plugins/opengl/src/programcache.cpp: In member function 'void PrivateProgramCache::insert(std::string, GLProgram*)':
/tmp/buildd/compiz-0.9.12.1+15.10.20150627.1/plugins/opengl/src/programcache.cpp:162:70: error: no matching function for call to 'std::map<std::basic_string<char>, std::pair<boost::shared_ptr<GLProgram>, std::_List_iterator<std::basic_string<char> > > >::insert(std::pair<std::basic_string<char>, std::pair<GLProgram*, std::_List_iterator<std::basic_string<char> > > >)'
     cache.insert (std::make_pair (name, std::make_pair (program, it)));
                                                                      ^
/tmp/buildd/compiz-0.9.12.1+15.10.20150627.1/plugins/opengl/src/programcache.cpp:162:70: note: candidates are:
In file included from /usr/include/c++/4.9/map:61:0,
                 from /tmp/buildd/compiz-0.9.12.1+15.10.20150627.1/plugins/opengl/include/opengl/programcache.h:31,
                 from /tmp/buildd/compiz-0.9.12.1+15.10.20150627.1/plugins/opengl/src/programcache.cpp:27:
/usr/include/c++/4.9/bits/stl_map.h:629:7: note: 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<_Allocator>::rebind<std::pair<const _Key, _Tp> >::other>::iterator, bool> std::map<_Key, _Tp, _Compare, _Alloc>::insert(const value_type&) [with _Key = std::basic_string<char>; _Tp = std::pair<boost::shared_ptr<GLProgram>, std::_List_iterator<std::basic_string<char> > >; _Compare = std::less<std::basic_string<char> >; _Alloc = std::allocator<std::pair<const std::basic_string<char>, std::pair<boost::shared_ptr<GLProgram>, std::_List_iterator<std::basic_string<char> > > > >; typename std::_Rb_tree<_Key, std::pair<const _Key, _Tp>, std::_Select1st<std::pair<const _Key, _Tp> >, _Compare, typename __gnu_cxx::__alloc_traits<_Allocator>::rebind<std::pair<const _Key, _Tp> >::other>::iterator = std::_Rb_tree_iterator<std::pair<const std::basic_string<char>, std::pair<boost::shared_ptr<GLProgram>, std::_List_iterator<std::basic_string<char> > > > >; std::map<_Key, _Tp, _Compare, _Alloc>::value_type = std::pair<const std::basic_string<char>, std::pair<boost::shared_ptr<GLProgram>, std::_List_iterator<std::basic_string<char> > > >]
       insert(const value_type& __x)
       ^
/usr/include/c++/4.9/bits/stl_map.h:629:7: note: no known conversion for argument 1 from 'std::pair<std::basic_string<char>, std::pair<GLProgram*, std::_List_iterator<std::basic_string<char> > > >' to 'const value_type& {aka const std::pair<const std::basic_string<char>, std::pair<boost::shared_ptr<GLProgram>, std::_List_iterator<std::basic_string<char> > > >&}'
/usr/include/c++/4.9/bits/stl_map.h:637:9: note: template<class _Pair, class> 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<_Allocator>::rebind<std::pair<const _Key, _Tp> >::other>::iterator, bool> std::map<_Key, _Tp, _Compare, _Alloc>::insert(_Pair&&) [with _Pair = _Pair; <template-parameter-2-2> = <template-parameter-1-2>; _Key = std::basic_string<char>; _Tp = std::pair<boost::shared_ptr<GLProgram>, std::_List_iterator<std::basic_string<char> > >; _Compare = std::less<std::basic_string<char> >; _Alloc = std::allocator<std::pair<const std::basic_string<char>, std::pair<boost::shared_ptr<GLProgram>, std::_List_iterator<std::basic_string<char> > > > >]
         insert(_Pair&& __x)
         ^
/usr/include/c++/4.9/bits/stl_map.h:637:9: note: template argument deduction/substitution failed:
/usr/include/c++/4.9/bits/stl_map.h:633:32: error: no type named 'type' in 'struct std::enable_if<false, void>'
       template<typename _Pair, typename = typename
                                ^
/usr/include/c++/4.9/bits/stl_map.h:650:7: note: void std::map<_Key, _Tp, _Compare, _Alloc>::insert(std::initializer_list<std::pair<const _Key, _Tp> >) [with _Key = std::basic_string<char>; _Tp = std::pair<boost::shared_ptr<GLProgram>, std::_List_iterator<std::basic_string<char> > >; _Compare = std::less<std::basic_string<char> >; _Alloc = std::allocator<std::pair<const std::basic_string<char>, std::pair<boost::shared_ptr<GLProgram>, std::_List_iterator<std::basic_string<char> > > > >]
       insert(std::initializer_list<value_type> __list)
       ^
/usr/include/c++/4.9/bits/stl_map.h:650:7: note: no known conversion for argument 1 from 'std::pair<std::basic_string<char>, std::pair<GLProgram*, std::_List_iterator<std::basic_string<char> > > >' to 'std::initializer_list<std::pair<const std::basic_string<char>, std::pair<boost::shared_ptr<GLProgram>, std::_List_iterator<std::basic_string<char> > > > >'
/usr/include/c++/4.9/bits/stl_map.h:679:7: note: std::map<_Key, _Tp, _Compare, _Alloc>::iterator std::map<_Key, _Tp, _Compare, _Alloc>::insert(std::map<_Key, _Tp, _Compare, _Alloc>::const_iterator, const value_type&) [with _Key = std::basic_string<char>; _Tp = std::pair<boost::shared_ptr<GLProgram>, std::_List_iterator<std::basic_string<char> > >; _Compare = std::less<std::basic_string<char> >; _Alloc = std::allocator<std::pair<const std::basic_string<char>, std::pair<boost::shared_ptr<GLProgram>, std::_List_iterator<std::basic_string<char> > > > >; std::map<_Key, _Tp, _Compare, _Alloc>::iterator = std::_Rb_tree_iterator<std::pair<const std::basic_string<char>, std::pair<boost::shared_ptr<GLProgram>, std::_List_iterator<std::basic_string<char> > > > >; std::map<_Key, _Tp, _Compare, _Alloc>::const_iterator = std::_Rb_tree_const_iterator<std::pair<const std::basic_string<char>, std::pair<boost::shared_ptr<GLProgram>, std::_List_iterator<std::basic_string<char> > > > >; std::map<_Key, _Tp, _Compare, _Alloc>::value_type = std::pair<const std::basic_string<char>, std::pair<boost::shared_ptr<GLProgram>, std::_List_iterator<std::basic_string<char> > > >]
       insert(const_iterator __position, const value_type& __x)
       ^
/usr/include/c++/4.9/bits/stl_map.h:679:7: note: candidate expects 2 arguments, 1 provided
/usr/include/c++/4.9/bits/stl_map.h:690:9: note: template<class _Pair, class> std::map<_Key, _Tp, _Compare, _Alloc>::iterator std::map<_Key, _Tp, _Compare, _Alloc>::insert(std::map<_Key, _Tp, _Compare, _Alloc>::const_iterator, _Pair&&) [with _Pair = _Pair; <template-parameter-2-2> = <template-parameter-1-2>; _Key = std::basic_string<char>; _Tp = std::pair<boost::shared_ptr<GLProgram>, std::_List_iterator<std::basic_string<char> > >; _Compare = std::less<std::basic_string<char> >; _Alloc = std::allocator<std::pair<const std::basic_string<char>, std::pair<boost::shared_ptr<GLProgram>, std::_List_iterator<std::basic_string<char> > > > >]
         insert(const_iterator __position, _Pair&& __x)
         ^
/usr/include/c++/4.9/bits/stl_map.h:690:9: note: template argument deduction/substitution failed:
/tmp/buildd/compiz-0.9.12.1+15.10.20150627.1/plugins/opengl/src/programcache.cpp:162:70: note: cannot convert 'std::make_pair(_T1&&, _T2&&) [with _T1 = std::basic_string<char>&; _T2 = std::pair<GLProgram*, std::_List_iterator<std::basic_string<char> > >; typename std::__decay_and_strip<_T2>::__type = std::pair<GLProgram*, std::_List_iterator<std::basic_string<char> > >; typename std::__decay_and_strip<_Tp>::__type = std::basic_string<char>]((* & std::make_pair<GLProgram*&, std::_List_iterator<std::basic_string<char> >&>((* & program), (* & it))))' (type 'std::pair<std::basic_string<char>, std::pair<GLProgram*, std::_List_iterator<std::basic_string<char> > > >') to type 'std::map<std::basic_string<char>, std::pair<boost::shared_ptr<GLProgram>, std::_List_iterator<std::basic_string<char> > > >::const_iterator {aka std::_Rb_tree_const_iterator<std::pair<const std::basic_string<char>, std::pair<boost::shared_ptr<GLProgram>, std::_List_iterator<std::basic_string<char> > > > >}'
     cache.insert (std::make_pair (name, std::make_pair (program, it)));
                                                                      ^
In file included from /usr/include/c++/4.9/map:61:0,
                 from /tmp/buildd/compiz-0.9.12.1+15.10.20150627.1/plugins/opengl/include/opengl/programcache.h:31,
                 from /tmp/buildd/compiz-0.9.12.1+15.10.20150627.1/plugins/opengl/src/programcache.cpp:27:
/usr/include/c++/4.9/bits/stl_map.h:705:9: note: template<class _InputIterator> void std::map<_Key, _Tp, _Compare, _Alloc>::insert(_InputIterator, _InputIterator) [with _InputIterator = _InputIterator; _Key = std::basic_string<char>; _Tp = std::pair<boost::shared_ptr<GLProgram>, std::_List_iterator<std::basic_string<char> > >; _Compare = std::less<std::basic_string<char> >; _Alloc = std::allocator<std::pair<const std::basic_string<char>, std::pair<boost::shared_ptr<GLProgram>, std::_List_iterator<std::basic_string<char> > > > >]
         insert(_InputIterator __first, _InputIterator __last)
         ^
/usr/include/c++/4.9/bits/stl_map.h:705:9: note: template argument deduction/substitution failed:
/tmp/buildd/compiz-0.9.12.1+15.10.20150627.1/plugins/opengl/src/programcache.cpp:162:70: note: candidate expects 2 arguments, 1 provided
     cache.insert (std::make_pair (name, std::make_pair (program, it)));
                                                                      ^

Related branches

Stephen M. Webb (bregma)
Changed in compiz:
assignee: nobody → Stephen M. Webb (bregma)
importance: Undecided → High
milestone: none → 0.9.12.2
status: New → In Progress
Stephen M. Webb (bregma)
Changed in compiz:
status: In Progress → Fix Committed
Stephen M. Webb (bregma)
Changed in compiz:
status: Fix Committed → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.