[MultiIndex] more on key extractor issues
I think my problem stems from the use of 'const' in the underlying element with pointer
traversal.
Consider:
typedef multi_index_container<
shared_ptr< const ItemBase >,
indexed_by<
ordered_non_unique<
member<
const ItemBase, // <<--- here
const unsigned long, // <<--- here
&ItemBase::some_member
>
>, // ordered_non_unique
ordered_unique<
tag<S2>,
member<
ItemBase,
const S2,
&ItemBase::another_member
>
> // ordered_unique
> // indexed_by
> ItemList_type_base;
I added the two 'const' occurrences on the lines marked with "here", and it behaved
better. I think it worked with the second index originally because one of those const's
was originally there. The member in question was originally const, so I had included
const as part of the type there.
Basically, what is happening on Windows VS10 is:
template
John M. Dlugosz
I think my problem stems from the use of 'const' in the underlying element with pointer traversal.
Consider:
typedef multi_index_container< shared_ptr< const ItemBase >, indexed_by<
ordered_non_unique< member< const ItemBase, // <<--- here const unsigned long, // <<--- here &ItemBase::some_member > >, // ordered_non_unique
ordered_unique< tag<S2>, member< ItemBase, const S2, &ItemBase::another_member > > // ordered_unique
> // indexed_by > ItemList_type_base;
Have you taken a look at the table in: http://www.boost.org/libs/multi_index/doc/tutorial/ key_extraction.html#advanced_key_extractors Regardless of whether the indexed-by member is const or not, when using pointers to const elements the proper way of declaring the extractors is: member< ItemBase, const unsigned long, &ItemBase::some_member
member< ItemBase, const S2, &ItemBase::another_member
This should clear problems away both in VS and Clang (please report otherwise.) Joaquín M López Muñoz Telefónica Digital
participants (2)
-
Joaquin M Lopez Munoz
-
John M. Dlugosz