|
Boost : |
Subject: [boost] [multi_index][intel-linux-14.0.0][repost] Help needed debugging initializer list support
From: Joaquin M Lopez Munoz (joaquin_at_[hidden])
Date: 2013-09-21 14:23:09
Hi,
Any kind soul can help with this? Reposting:
The trunk version of Boost.MultiIndex introduces support for
initializer list, which seems to work fine with regression tests
except for intel-linux-14.0.0:
http://tinyurl.com/pclssoe
http://tinyurl.com/nzwzpu6
which spits error messages like this (replaced large chunks of text
with *** for clarity):
../libs/multi_index/test/test_modifiers.cpp(230): error: no instance of
overloaded function
"boost::multi_index::detail::hashed_index<***>::insert [***]"
matches the
argument list
argument types are: ({...})
object type is: employee_set_by_name
i1.insert({{4,"Vanessa",20,9236},{5,"Penelope",55,2358}});
At first I thought this is failing because for it to work the compiler
should not only support initializer lists but also C++11 unified
initialization syntax, but I think this is not the problem because
a) intel-linux-14.0.0 does indeed seem to support unified initialization
syntax, since BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX is not
listed in http://tinyurl.com/ndutn2w .
b) the following test code also fails:
s.assign({0,1,2,3,4,5});
with s a multi_index_container of ints, and this does not depend
on unified initialization syntaxes. The error message here, FWIW, is
different than before:
../libs/multi_index/test/test_copy_assignment.cpp(56): internal error:
assertion failed: node_has_side_effects: bad node kind
(shared/cfe/edgcpfe/il.c, line 20611)
The tested code seems simple enough, for instance lines 271 and
following of multi_index_container.hpp look like:
#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
multi_index_container(
std::initializer_list<Value> list,
const ctor_args_list& args_list=ctor_args_list(),
const allocator_type& al=allocator_type())
[...]
and the ofending assign member function in sequenced_index.hpp
is as innocent as:
#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
void assign(std::initializer_list<value_type> list)
{
assign(list.begin(),list.end());
}
#endif
Besides, other libs with initializer list support such as Boost.SmartPtr
and Boost.Unordered cope fine with this compiler.
Clues? Any help much appreciated.
JoaquÃn M López Muñoz
Telefónica Digital
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk