$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
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