|
Boost : |
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
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk