Subject: Re: [boost] [type_traits]common_type and SFINAE
From: Louis Dionne (louis.dionne92_at_[hidden])
Date: 2012-10-08 09:44:43


Lorenzo Caminiti <lorcaminiti <at> gmail.com> writes:

>
> Hello all,
>
> common_type<T, U>::type is defined in a way that gives a hard compiler
> error if T and U do not have a common type (this is also how
> common_type is implemented in C++11).
>
> An alternative design (I'm not sure if implementable) would have been
> to not define the type member in case T and U have no common type.
> This way I could use SFINAE to detect if common_type<T, U>::type does
> not exist and therefore if T and U have not common type -- so to
> implement N3351's concept Common<T, U>.
>
> Is there a way to implement this alternative design?
>

While this is not directly linked to your question, I have implemented some
concepts using SFINAE so you can write stuff like:
    template <typename T>
    typename std::enable_if<LessThanComparable<T>::value>::type func() { }

What I did works only in C++11. You may take a look at what I did here:
www.github.com/ldionne/duck

I'll be glad if this can be of any help. Please do not hesitate to contact me
for anything.

Louis Dionne