Boost logo

Boost :

Subject: Re: [boost] [multi_index] Taking advantage of C++17 auto template params to simplify key specification
From: Dominique Devienne (ddevienne_at_[hidden])
Date: 2017-09-27 11:47:59

On Wed, Sep 27, 2017 at 12:53 PM, Joaquin M López Muñoz via Boost <
boost_at_[hidden]> wrote:

> using container=multi_index_container<
> element,
> indexed_by<
> ordered_unique<member<element,int,&element::x>>,
> ordered_unique<const_mem_fun<element,int,&element::f>>,
> ordered_unique<global_fun<const element&,int,&gf>>
> >
> >;
classical def#1

> With the advent in C++17 of auto non-type template parameters, it is very
> easy to
> provide a boost::multi_index::key class template so that we can write:
> using container=multi_index_container<
> element,
> indexed_by<
> ordered_unique<key<&element::x>>,
> ordered_unique<key<&element::f>>,
> ordered_unique<key<&gf>>
> >
> >;
C++17 def#2

> (Example at ).

template<auto Member> struct key{};

template<typename Class,typename Type,Type Class::*PtrToMember>
struct key<PtrToMember>:

template<typename Class,typename Type,Type
struct key<PtrToMemberFunction>:

template<typename Class,typename Type,Type (Class::*PtrToMemberFunction)()>
struct key<PtrToMemberFunction>:

template<class Value,typename Type,Type (*PtrToFunction)(Value)>
struct key<PtrToFunction>:

Is there interest in adding this to Boost.MultiIndex? Comments on this
> [...] syntaxes?

I'm out of my depth here, but the fact you use inheritance means the two
are not the same as a consequence, right? I.e. std::is_name<def#1, def#2>
is false?

And I suppose such partial specialization is not possible with template
type aliases
to have is_same<> being true? Not sure it matters, just thinking out loud.

Boost list run by bdawes at, gregod at, cpdaniel at, john at